




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京市建筑材料寄存与环保检测服务协议范本2025
- 2025年北京市外贸企业员工劳动合同参考范本
- 物联网在智慧农业中的前景展望
- 科普手术操作流程
- 电子产品物流司机用工合同
- 2025年度办公室租赁及企业财务咨询服务协议
- 二零二五年度互联网企业员工劳动合同范本
- 肾衰竭护理查房
- 校园卫生咱维护劳动教育
- 林地使用权转让合同模板
- 湖南省炎德英才名校联考联合体2024-2025学年高二下学期3月月考-数学+答案
- (3月省质检)福建省2025届高三毕业班适应性练习卷英语试卷(含答案)
- 专业网格员测试题及答案
- 2025年上半年贵州黔东南州各县(市)事业单位招聘工作人员1691人笔试易考易错模拟试题(共500题)试卷后附参考答案
- 湖南省长沙市雅礼教育集团2024-2025学年高一上学期期末考试英语试卷含答案
- 生猪屠宰兽医卫生检验人员理论考试题库及答案
- 2023年广东省中学生生物学联赛试题解析(word)及答案(扫描版)
- 《云南省食品安全地方标准 天麻》编制说明
- 基于语音信号去噪处理的FIR低通滤波器设计要点
- G414(五) 预应力钢筋混凝土工字形屋面梁
- 木箱制作作业指导书
评论
0/150
提交评论