面向对象的Java实现-继承和多态_第1页
面向对象的Java实现-继承和多态_第2页
面向对象的Java实现-继承和多态_第3页
面向对象的Java实现-继承和多态_第4页
面向对象的Java实现-继承和多态_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 2 回顾 在Java程序中,代码封装带给我们的 好处是什么? 举例说明什么是方法重载? Java中的构造方法与实例方法,有什 么区别? 3 掌握继承 掌握super关键字 掌握多态 本章目标 4 生活中的继承1 生活中,继承的例子随处可见 动物动物 食草动物食草动物食肉动物食肉动物 谁是父类?谁是父类? 谁是子类?谁是子类? 能说出继承的特点吗?能说出继承的特点吗? 继承需要符合的关系:继承需要符合的关系:is-a,父类更通用、子类更具体,父类更通用、子类更具体 5 生活中的继承2 子类具有父类的一般特性(包括属性和行 为),以及自身特殊的特性 巴士是汽车吗?巴士是汽车吗? 卡车是汽车吗?卡

2、车是汽车吗? 出租车是汽车吗?出租车是汽车吗? 最大载客数量最大载客数量 报站报站 引擎数量引擎数量 外观颜色外观颜色 刹车刹车 加速加速 汽车汽车 最大载重量最大载重量 卸货卸货 所属公司所属公司 最大载客数量最大载客数量 打发票打发票 属性属性 行为行为 请问:出租车请问:出租车 包含哪些属性包含哪些属性 和行为呢?和行为呢? 6 为什么需要继承1 开发教员类,其中教员分为Java教员以 及.NET教员,各自的要求如下: Java教员 属性:姓名、所属中心属性:姓名、所属中心 方法:授课(步骤:打开方法:授课(步骤:打开Eclipse、实施理论课授课)、实施理论课授课)、 自我介绍自我介绍

3、 .NET教员 属性:姓名、所属中心属性:姓名、所属中心 方法:授课(步骤:打开方法:授课(步骤:打开Visual studio 2005、实施理、实施理 论课授课)、自我介绍论课授课)、自我介绍 7 请问:以下这个解决方案中存在着什么问 题? 为什么需要继承 2 public class DotNetTeacher private String name; / 教员姓名教员姓名 private String school; / 所在中心所在中心 public DotNetTeacher(String myName, String mySchool) name = myName; school

4、 = mySchool; public void giveLession() System.out.println(启动启动 Visual Studio 2005); System.out.println(知识点讲解知识点讲解); System.out.println(总结提问总结提问); public void introduction() System.out.println(大家好!我是大家好!我是 + school + 的的 + name + .); public class JavaTeacher private String name; / 教员姓名教员姓名 private Str

5、ing school; / 所在中心所在中心 public JavaTeacher(String myName, String mySchool) name = myName; school = mySchool; public void giveLession() System.out.println(启动启动 Eclipse); System.out.println(知识点讲解知识点讲解); System.out.println(总结提问总结提问); public void introduction() System.out.println(大家好!我是大家好!我是 + school +

6、的的 + name + .); 代码存在重复,违背了代码存在重复,违背了“write once, only once”的原则的原则 8 为什么需要继承 3 如何改进?有没有可能建立继承关系,让 子类自动继承父类的属性和方法? Java教员是教员吗?教员是教员吗? .NET教员是教员吗?教员是教员吗? public class Teacher private String name; / 教员姓名教员姓名 private String school; / 所在中心所在中心 public Teacher(String myName, String mySchool) name = myName;

7、school = mySchool; public void giveLesson() System.out.println(知识点讲解知识点讲解); System.out.println(总结提问总结提问); public void introduction() System.out.println(大家好!我是大家好!我是 “ + school + 的的 + name + 。); 现在,所有子类中相同的代码现在,所有子类中相同的代码 都抽取到父类中了都抽取到父类中了 属属 性性 行行 为为 姓名姓名 所在中心所在中心 授课授课 自我介绍自我介绍 教员教员 Java教员教员.NET教员教员

8、9 为什么需要继承 4-4 public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String mySchool) super(myName, mySchool); public void giveLesson() System.out.println(启动启动 Eclipse); super.giveLesson(); public class DotNetTeacher2 extends Teacher public AccpDotNetTeacher2(String myName, Str

9、ing mySchool) super(myName, mySchool); public void giveLesson() System.out.println(启动启动 Visual Studio .NET); super.giveLesson(); 使用继承,可以有效实现代码复用使用继承,可以有效实现代码复用 子类自动继承父类的属性子类自动继承父类的属性 和方法,子类中不再存在和方法,子类中不再存在 重复代码重复代码 10 如何实现继承 1 在Java语言中,用extends关键字来表示一 个类继承了另一个类,例如: public class JavaTeacher2 extends

10、Teacher /其余代码省略其余代码省略 在父类中只定义一些通用的属性与方法, 例如: public class Teacher private String name; / 教员姓名教员姓名 private String school; / 所在中心所在中心 public Teacher(String myName, String mySchool) /初始化属性值初始化属性值 public void giveLesson() /授课方法的具体实现授课方法的具体实现 public void introduction() /自我介绍方法的具体实现自我介绍方法的具体实现 11 如何实现继承 2

11、 子类自动继承父类的属性和方法,子类中 可以定义特定的属性和方法 public class Teacher private String name; / 教员姓名教员姓名 private String school;/ 所在中心所在中心 public Teacher (String myName, String mySchool) /初始化属性值初始化属性值 public void giveLesson() /授课方法的具体实现授课方法的具体实现 public void introduction() /自我介绍方法的具体实现自我介绍方法的具体实现 public class JavaTeache

12、r2 extends AccpTeacher public JavaTeacher2(String myName, String mySchool) super(myName, mySchool); public void giveLesson() System.out.println(启动启动Eclipse); super.giveLesson(); 由于由于giveLesson()方法与方法与 父类的实现有所不同,因父类的实现有所不同,因 此重写了该方法此重写了该方法 方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型和访问修饰符方法重写:子类和父类的方法具有相同的名称、参数列表

13、、返回类型和访问修饰符 父类中的属性和方法可父类中的属性和方法可 以被子类继承以被子类继承 12 public class JavaTeacher2 extends Teacher public AccpJavaTeacher2(String myName, String mySchool) super(myName, mySchool); 如何实现继承 3 子类的构造方法中,通过super关键字调用 父类的构造方法 方法重写后,通过super关键字调用父类 的方法 public class JavaTeacher2 extends Teacher public void giveLesson

14、() System.out.println(启动启动 Eclipse); super.giveLesson(); 通过调用父类的构造方法,通过调用父类的构造方法, 完成对属性值的初始化完成对属性值的初始化 13 一切类的“祖先”Object 在Java 中,所有的Java类都直接或间接地 继承了java.lang.Object类 public class MyObject / public class MyObect extends Object / 在在Eclipse中调用中调用MyObject 对象的成员,会自动弹出继对象的成员,会自动弹出继 承自承自Object的所有方法的所有方法 14

15、 小结 1 请编码实现动物世界的继承关系: 动物(Animal)具有行为:吃(eat)、 睡觉(sleep) 动物包括:兔子(Rabbit),老虎 (Tiger) 这些动物吃的行为各不相同(兔子吃草, 老虎吃肉);但睡觉的行为是一致的 请通过继承实现以上需求,并编写测 试类AnimalTest进行测试 15 为什么需要多态 1 在教员类的基础上,开发一个类代表总 部,负责对各教员进行评估,评估内容 包括: 1、教员的自我介绍 2、教员的授课 16 为什么需要多态 2 public class HQ1 public void judge(JavaTeacher2 t) roductio

16、n(); t.giveLesson(); public void judge(DotNetTeacher2 t) roduction(); t.giveLesson(); public static void main(String args) HQ1 hq = new HQ1(); hq.judge(new JavaTeacher2(李明李明,北京中心北京中心“); hq.judge(new DotNetTeacher2(张明张明,天津中心天津中心“); 第一种解决方案 大家好!我是北京中心的李明大家好!我是北京中心的李明. 启动启动 Eclipse 知识点讲解知识点讲解 总结提问

17、总结提问 大家好!我是天津中心的张明大家好!我是天津中心的张明. 启动启动 Visual Studio 2005 知识点讲解知识点讲解 总结提问总结提问 控制台输出控制台输出 17 为什么需要多态 3 现在,升级教员类,增加一种新类型: DBTeacher,该类型的教员专门负责教授 数据库,要求如下: 属性:姓名、所属中心 方法:授课(启动Sql Server、实施理论课授 课)、自我介绍 同时,总部也负责对这类教员进行评估 18 为什么需要多态 4 如果在第一种解决方案的基础上去解决, 我们需要如下两个步骤: 建立DBTeacher类 修改总部类,增加方法:judge(DBTeacher t

18、) 每增加一种新的教员类型,都要修改总部类,增加相应的每增加一种新的教员类型,都要修改总部类,增加相应的 judge(评估评估)方法,代码的可扩展性及可维护性极差方法,代码的可扩展性及可维护性极差 能找到这个解决方案的弊端吗?能找到这个解决方案的弊端吗? 19 为什么需要多态 5 第二种解决方案使用多态 public class HQ3 public void judge(Teacher t) roduction(); t.giveLesson(); public static void main(String args) HQ3 hq = new HQ3(); hq.judge(n

19、ew JavaTeacher2(李明李明,北京中心北京中心“); hq.judge(new DotNetTeacher2(张明张明,天津中心天津中心); hq.judge(new DBTeacher(“李岚李岚,北京中心北京中心“); 可以接收子类类型可以接收子类类型 根据实际创建的对象根据实际创建的对象 类型调用相应方法类型调用相应方法 大家好!我是北京中心的李明大家好!我是北京中心的李明. 启动启动 Eclipse 知识点讲解知识点讲解 总结提问总结提问 大家好!我是天津中心的张明大家好!我是天津中心的张明. 启动启动 Visual Studio 2005 知识点讲解知识点讲解 总结提问总

20、结提问 大家好!我是北京中心的李岚大家好!我是北京中心的李岚. 启动启动 Sql Server 知识点讲解知识点讲解 总结提问总结提问 控制台输出控制台输出 使用多态之后,当需要增加新的子类类型 时,无需更改总部类,程序的可扩展性及 可维护性增强 20 什么是多态 简单来说,多态是具有表现多种形态的能 力的特征 同一个实现接口,使用不同的实例而执行 不同操作 彩色打印机彩色打印机 打印机打印机 黑白打印机黑白打印机 打印效果:彩色打印效果:彩色 打印效果:黑白打印效果:黑白 打印打印 打印打印 21 public class Teacher public void giveLesson() S

21、ystem.out.println(知识点讲解知识点讲解); System.out.println(总结提问总结提问); public class Test public static void main(String args) HQ3 hq = new HQ3(); hq.judge(new DBTeacher(); 3 如何实现多态 1、子类重写父类的方法 2、把父类型作为参数,该父类及其子类对象作为参数传入 3、运行时,根据实际创建的对象类型动态决定使用哪个方法 public class DBTeacher extends Teacher public void giveLesson() System.out.println(启动启动 SqlServer); super.giveLesson(); 1 public class HQ3 public void judge(Teacher t) t.giveLesson(); 2 22 小结 2 请编码实现如下需求: 乐器(Instrument)分为:钢琴(Piano)、小 提琴(Violin) 各种乐器的弹奏( play )方法各不相同 编写一个测试类InstrumentTest,要求: 编写方法testPlay,对各种乐器进行弹奏测 试。要依据乐器的不同

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论