版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、18. 面向对象高级(06) 本季要点:讲解抽象类与接口的关系。本季讲解了java中关于抽象类与接口的具体区别,同时讲解了两者的一些其他联系。之后讲解了模板设计模式、代理设计模式,最后又重点强调了抽象类和接口之间的关系blog: 零基础学JAVAJava SE面向对象部分-18.面向对象高级(06) 2009-02-08上季内容回顾:1、面向对象中接口与抽象类的具体应用。 可以通过对象的多态性,为父类实例化,之后一切的操作标准以父类为主。本季主要知识点:讲解抽象类与接口的关系。1、一个抽象类中能否包含一个接口呢?abstract class A
2、60; public abstract void fun(); interface B
3、; public void print(); 我们来验证测试下哈发现生成A$B.class,表示B作为A的内部接口,证明一个抽象类中可以包含一个内部接口。那怎么使用
4、呢?我们看下面哈首先我们先子类X覆写父类A方法但不覆写接口B中的方法abstract class A public abstract void fun(); interface B
5、160; public void print();
6、160; class X extends A /覆写父类fun()方法 public void fun()
7、60; System.out.println("Hello World!");
8、发现编译没有问题哈现在我们测试覆写接口方法哈abstract class A public abstract void fun(); interface B
9、160; public void print();
10、160; class X extends A /覆写父类fun()方法 public void fun()
11、60; B b = new Y(); b.print()
12、; class Y implements B
13、 /覆写父类接口中的方法print() public void print() &
14、#160; System.out.println("Hello Java!");
15、; 现在我们加上主方法进行测试哈abstract class A public abstract
16、;void fun(); interface B pub
17、lic void print(); class X extends A /覆写父类fun()方法 &
18、#160; public void fun() B b = new Y(
19、); b.print(); class Y implem
20、ents B /覆写父类接口中的方法print() &
21、#160; public void print()
22、160; System.out.println("Hello Java!"); public
23、 class Demo01 public static void main(String args)
24、0; A a = new X(); a.fun();
25、160; 证明一个抽象类中可以包含一个接口,之后在抽象类的子类中可以有选择的是否实现抽象类中的接口。2、一个接口中能否包含一个抽象类呢?同上,都是可以选择是否实现interface A public void fun(); ab
26、stract class B public abstract void print();
27、0; 下面我们写上个子类,检验一下是否可以有选择实现抽象类Binterface A public void fun(); abstr
28、act class B public abstract void print(); &
29、#160; class X implements A public void fun()
30、; 验证可以哈下面覆写抽象类B中print()方法interface A public void fun();
31、0; abstract class B public abstract void pr
32、int(); class X implements A public void fun()
33、0; new Y().print(); &
34、#160; class Y extends B public void print()
35、 System.out.println("Hello World!");
36、60; public class Demo02
37、0; public static void main(String args) A a = ne
38、w X(); a.fun(); 3、观察以下的程序,验证输出结果abstract class A
39、; public A() this.print();&
40、#160; public abstract void print(); class B extends A
41、60; private int i = 30; public B(int i)
42、60; this.i = i; public void print()
43、; System.out.println("i = "+i);
44、160; public class Demo03 public static void main(String args)
45、 new B(50); 输出结果为0哈,这与子类对象实例化过程有关哈回顾:子类对象的实例化过程 · 子类对象使用new关键字要调用构造方法 · 调用构造方
46、法时的顺序:先去调用父类中的构造方法(默认为无参构造),之后再调用子类中的构造方法。 · 调用构造方法的目的:为其内部的属性初始化 · 子类中的属性在没有完成父类中的构造方法之前,所有的内容都是默认值,整型是“0” 。思考: 我们知道一个子类如果实现了一个接口则肯定要覆写接口中的全部抽象方法。那问?是否可以采用一种方式,让子类可以有选择的去覆写自己真正需要的方法。interface Door
47、0; /开门 public void openDoor(); /关门 p
48、ublic void closeDoor(); /维修 public void repairDoor(); /拆除
49、0; public void removeDoor(); /锁门 public void lockDoor();
50、; class D implements Door /子类现在肯定要覆写里面全部的抽象方法 矛盾点: · 子类不需要覆写全部的方法 · 如果子类直接实现了接口则肯定要覆写全部的方法 ·
51、解决:如果中间加入了一个过渡端呢? 接口 -> 过渡端 -> 子类 |- 此过渡端不应该被直接使用。 -> 抽象类过渡端使用抽象类实现最合适,因为抽象类可以实现一个接口同时可以有一些抽象方法,并且不能直接被new关键字实例化。interface Door /开门 &
52、#160; public void openDoor(); /关门 public void closeDoor();
53、60; /维修 public void repairDoor(); /拆除 public
54、0;void removeDoor(); /锁门 public void lockDoor(); abstract class DoorAdapter imple
55、ments Door /但是以下的方法虽然实现了,可是没有具体的方法体 public void openDoor() &
56、#160; public void closeDoor() public void repairDoor() public void removeDoor()
57、160; public void lockDoor() class D extends DoorAdapter /子类现在肯定要覆写里面全部的抽象方法
58、; /只需要打开门 public void openDoor()
59、160; System.out.println("开门"); public class Demo04
60、0; public static void main(String args) new D().openDoor(); &
61、#160; 此处是有选择的在子类实现了所需要的方法。这种设计称为Adapter(适配器设计) 4、模拟: · 张三 很老实 -> 李四,借10000000元,不还 · 张三 -> 讨债公司 -> 李四 -> 还钱 张三和讨债公司的目的 -> 还钱。/主题:讨债
62、0; interface Subject /完成具体的操作 public void giveMe(); /真正
63、要讨债的人 class RealSubject implements Subject public void giveMe()
64、0; System.out.println("还我滴Money"); /代理人 class Pr
65、oxySubject implements Subject private Subject sub = null; public ProxySubject(Subject sub) &
66、#160; this.sub = sub;
67、0; public void before() System.out.println("需要一些准备");
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六盘水师范学院《软件应用训练》2023-2024学年第一学期期末试卷
- 2024年新版工程劳务基础合同
- 2024年个人隐私保护与不正当竞争禁止合同
- 聊城职业技术学院《相图与相平衡》2023-2024学年第一学期期末试卷
- 2024版定制衣柜设计与生产环保认证合同范本3篇
- 聊城大学东昌学院《工业制图》2023-2024学年第一学期期末试卷
- 2024年度智慧零售行业电商企业劳动合同范本2篇
- 2024年度农业知识产权许可使用合同2篇
- 辽阳职业技术学院《家庭教育指导》2023-2024学年第一学期期末试卷
- 2024年强夯地基处理与地质勘察合同3篇
- 中国非物质文化遗产智慧树知到期末考试答案章节答案2024年云南大学
- MOOC 行政法与行政诉讼法学-西南政法大学 中国大学慕课答案
- 无缝气瓶检验作业指导书2024
- 综合英语智慧树知到期末考试答案2024年
- 煤矿带式输送机保护装置安装试验规定
- 2022新《安全生产法》考试题库(含答案)
- 介绍美国医疗制度问题
- 《制作酸奶的方法》课件
- (高清版)DZT 0432-2023 煤炭与煤层气矿产综合勘查规范
- 《早期教育概论》课程标准
- 部分地区高二上学期期末语文试卷汇编文言文阅读(含答案)
评论
0/150
提交评论