版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年农产品食品安全现状研究报告
- 丙烯酸丁酯反应器列管堵塞热成像及压差分析安全检测报告
- 2026年中秋节员工团建活动
- 2026年冰雪单职业灵兽转生教程
- 2026年幼儿园迪士尼活动入场方案
- 2026年供应链系统规划设计案例分析
- 南充职业技术学院《英国文学经典》2026-2027学年第一学期期末试卷含解析
- 湖北师范大学《施工企业财务管理》2026-2027学年第一学期期末试卷含解析
- 衡阳师范学院《标准化工程》2026-2027学年第一学期期末试卷含解析
- 陕西职业技术学院《财税英语》2026-2027学年第一学期期末试卷含解析
- 煤矿安全生产的智能化监控体系建设
- 雨课堂学堂云在线《信息与通信技术》单元测试考核答案
- 档案管理岗位面试常见问题
- 2025云南文山市教育体育系统选调中学教师21人笔试备考题库及答案解析
- 矿石物流仓储管理方案(3篇)
- 北京市北方交通大学附属中学2025届物理高一第二学期期末综合测试试题含解析
- 精神科攻击风险评估及护理
- 新疆民丰县其其兰干砂金矿项目环评报告
- 临床下肢深静脉血栓形成介入治疗护理
- 消防维保合同协议书电子版模板
- 压疮分期的试题及答案
评论
0/150
提交评论