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

下载本文档

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

文档简介

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

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

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

4、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 String school; / 所在中心所在中心public JavaTeacher(String myNam

5、e, 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 + 的的 + name + .); 代码存在重复,违背了代码存在重复,违背了“write once, only once”

6、的原则的原则 8为什么需要继承 3 如何改进?有没有可能建立继承关系,让子类自动继承父类的属性和方法?Java教员是教员吗?教员是教员吗?.NET教员是教员吗?教员是教员吗?public class Teacher private String name; / 教员姓名教员姓名private String school; / 所在中心所在中心public Teacher(String myName, String mySchool) name = myName;school = mySchool;public void giveLesson()System.out.println(知识点讲解知

7、识点讲解);System.out.println(总结提问总结提问); public void introduction() System.out.println(大家好!我是大家好!我是“ + school + 的的 + name + 。); 现在,所有子类中相同的代码现在,所有子类中相同的代码都抽取到父类中了都抽取到父类中了 属属性性行行为为姓名姓名所在中心所在中心授课授课自我介绍自我介绍教员教员Java教员教员.NET教员教员9为什么需要继承 4-4public class JavaTeacher2 extends Teacher public JavaTeacher2(String m

8、yName, String mySchool) super(myName, mySchool);public void giveLesson()System.out.println(启动启动 Eclipse);super.giveLesson();public class DotNetTeacher2 extends Teacher public AccpDotNetTeacher2(String myName, String mySchool) super(myName, mySchool);public void giveLesson()System.out.println(启动启动 Vi

9、sual Studio .NET);super.giveLesson();使用继承,可以有效实现代码复用使用继承,可以有效实现代码复用子类自动继承父类的属性子类自动继承父类的属性和方法,子类中不再存在和方法,子类中不再存在重复代码重复代码10如何实现继承 1 在Java语言中,用extends关键字来表示一个类继承了另一个类,例如:public class JavaTeacher2 extends Teacher /其余代码省略其余代码省略 在父类中只定义一些通用的属性与方法,例如:public class Teacher private String name; / 教员姓名教员姓名priv

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

11、/ 所在中心所在中心public Teacher (String myName, String mySchool) /初始化属性值初始化属性值public void giveLesson() /授课方法的具体实现授课方法的具体实现 public void introduction() /自我介绍方法的具体实现自我介绍方法的具体实现 public class JavaTeacher2 extends AccpTeacher public JavaTeacher2(String myName, String mySchool) super(myName, mySchool);public void

12、 giveLesson()System.out.println(启动启动Eclipse);super.giveLesson();由于由于giveLesson()方法与方法与父类的实现有所不同,因父类的实现有所不同,因此重写了该方法此重写了该方法 方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型和访问修饰符方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型和访问修饰符 父类中的属性和方法可父类中的属性和方法可以被子类继承以被子类继承12public class JavaTeacher2 extends Teacher public AccpJavaTeacher2(Stri

13、ng myName, String mySchool) super(myName, mySchool);如何实现继承 3 子类的构造方法中,通过super关键字调用父类的构造方法 方法重写后,通过super关键字调用父类的方法public class JavaTeacher2 extends Teacher public void giveLesson()System.out.println(启动启动 Eclipse);super.giveLesson();通过调用父类的构造方法,通过调用父类的构造方法,完成对属性值的初始化完成对属性值的初始化13一切类的“祖先”Object 在Java 中,

14、所有的Java类都直接或间接地继承了java.lang.Object类public class MyObject /public class MyObect extends Object /在在Eclipse中调用中调用MyObject对象的成员,会自动弹出继对象的成员,会自动弹出继承自承自Object的所有方法的所有方法14小结 1 请编码实现动物世界的继承关系: 动物(Animal)具有行为:吃(eat)、睡觉(sleep) 动物包括:兔子(Rabbit),老虎(Tiger) 这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的 请通过继承实现以上需求,并编写测试类Anim

15、alTest进行测试 15为什么需要多态 1在教员类的基础上,开发一个类代表总部,负责对各教员进行评估,评估内容包括: 1、教员的自我介绍 2、教员的授课16为什么需要多态 2public class HQ1 public void judge(JavaTeacher2 t)roduction();t.giveLesson();public void judge(DotNetTeacher2 t)roduction();t.giveLesson();public static void main(String args) HQ1 hq = new HQ1();hq.judg

16、e(new JavaTeacher2(李明李明,北京中心北京中心“);hq.judge(new DotNetTeacher2(张明张明,天津中心天津中心“); 第一种解决方案大家好!我是北京中心的李明大家好!我是北京中心的李明.启动启动 Eclipse知识点讲解知识点讲解总结提问总结提问大家好!我是天津中心的张明大家好!我是天津中心的张明.启动启动 Visual Studio 2005知识点讲解知识点讲解总结提问总结提问17为什么需要多态 3 现在,升级教员类,增加一种新类型:DBTeacher,该类型的教员专门负责教授数据库,要求如下: 属性:姓名、所属中心 方法:授课(启动Sql Serv

17、er、实施理论课授课)、自我介绍 同时,总部也负责对这类教员进行评估18为什么需要多态 4如果在第一种解决方案的基础上去解决,我们需要如下两个步骤:建立DBTeacher类修改总部类,增加方法:judge(DBTeacher t)每增加一种新的教员类型,都要修改总部类,增加相应的每增加一种新的教员类型,都要修改总部类,增加相应的judge(评估评估)方法,代码的可扩展性及可维护性极差方法,代码的可扩展性及可维护性极差 能找到这个解决方案的弊端吗?能找到这个解决方案的弊端吗?19为什么需要多态 5 第二种解决方案使用多态public class HQ3 public void judge(Tea

18、cher t)roduction();t.giveLesson();public static void main(String args) HQ3 hq = new HQ3();hq.judge(new JavaTeacher2(李明李明,北京中心北京中心“);hq.judge(new DotNetTeacher2(张明张明,天津中心天津中心);hq.judge(new DBTeacher(“李岚李岚,北京中心北京中心“);可以接收子类类型可以接收子类类型根据实际创建的对象根据实际创建的对象类型调用相应方法类型调用相应方法大家好!我是北京中心的李明大家好!我是北京中心的李明.启动启

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

20、:彩色打印效果:黑白打印效果:黑白打印打印 打印打印 21public class Teacher public void giveLesson() System.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、运行时,根据实际创建的对象类型动

21、态决定使用哪个方法public class DBTeacher extends Teacher public void giveLesson() System.out.println(启动启动 SqlServer); super.giveLesson(); 1public class HQ3 public void judge(Teacher t) t.giveLesson(); 222小结 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

提交评论