版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象特性继承和多态回顾回顾在在Java程序中,代码封装带给我们的好处是什么?程序中,代码封装带给我们的好处是什么?举例说明什么是方法重载?举例说明什么是方法重载?Java中的构造方法与实例方法,有什么区别?中的构造方法与实例方法,有什么区别?面向对象特性继承和多态本章任务本章任务升级升级HelloWorld,输出,输出Oracle职员的基本信息:职员的基本信息:使用继承提高代码的复用性使用继承提高代码的复用性 使用多态提高代码的可扩展性及可维护性使用多态提高代码的可扩展性及可维护性面向对象特性继承和多态 掌握继承掌握继承 掌握掌握super关键字关键字 掌握多态掌握多态本章目标本章目标面向
2、对象特性继承和多态生活中的继承生活中的继承 2-1 生活中,继承的例子随处可见生活中,继承的例子随处可见动物动物食草动物食草动物食肉动物食肉动物谁是父类?谁是父类?谁是子类?谁是子类?能说出继承的特点吗?能说出继承的特点吗?继承需要符合的关系:继承需要符合的关系:is-a,父类更通用、子类更具体,父类更通用、子类更具体面向对象特性继承和多态生活中的继承生活中的继承 2-2 子类具有父类的一般特性(包括属性和行为),以及自身特子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性殊的特性巴士是汽车吗?巴士是汽车吗?卡车是汽车吗?卡车是汽车吗?出租车是汽车吗?出租车是汽车吗?最大载客数量最大
3、载客数量报站报站引擎数量引擎数量外观颜色外观颜色刹车刹车加速加速汽车汽车最大载重量最大载重量卸货卸货所属公司所属公司最大载客数量最大载客数量打发票打发票属性属性行为行为请问:出租车请问:出租车包含哪些属性包含哪些属性和行为呢?和行为呢?面向对象特性继承和多态为什么需要继承为什么需要继承 4-1 开发开发Oracle职员类,其中职员分为职员类,其中职员分为Java职员以及职员以及.NET职员,各自的要求如下:职员,各自的要求如下: Java职员职员 属性:姓名、所属中心属性:姓名、所属中心 方法:编写代码(步骤:启动方法:编写代码(步骤:启动java开发工具、开始编码)、自我开发工具、开始编码)
4、、自我介绍介绍 .NET职员职员 属性:姓名、所属中心属性:姓名、所属中心方法:编写代码(步骤:启动方法:编写代码(步骤:启动.NET开发工具、开始编码)、自我开发工具、开始编码)、自我介绍介绍面向对象特性继承和多态 请问:以下这个解决方案中存在着什么问题?请问:以下这个解决方案中存在着什么问题?为什么需要继承为什么需要继承 4-2public class OracleDotNetStaff private String name; / 职员姓名职员姓名private String school; / 所在中心所在中心public OracleDotNetStaff(String myName
5、, String mySchool) name = myName; school = mySchool;public void giveLession()System.out.println(“启动启动开发开发工具工具);System.out.println(“开始编码开始编码); public void introduction() System.out.println(大家好!我是大家好!我是 + school + 的的 + name + .); public class OracleJavaStaff private String name; / 职员姓名职员姓名private Stri
6、ng school; / 所在中心所在中心public OracleJavaStaff(String myName, String mySchool) name = myName; school = mySchool;public void giveLession()System.out.println(启动启动javajava开发工开发工具具););System.out.println(开始编码开始编码);public void introduction() System.out.println(大家好!我是大家好!我是 + school + 的的 + name + .); 代码存在重复,违
7、背了代码存在重复,违背了“write once run anywhere”的原则的原则 面向对象特性继承和多态为什么需要继承为什么需要继承 4-3 如何改进?有没有可能建立继承关系,让子类自动继承父类如何改进?有没有可能建立继承关系,让子类自动继承父类的属性和方法?的属性和方法?Java职员是职员吗?职员是职员吗?.NET职员是职员吗?职员是职员吗?public class OracleStaff private String name; / 职员姓名职员姓名private String school; / 所在中心所在中心public OracleStaff(String myName, S
8、tring mySchool) name = myName;school = mySchool;public void giveLesson()System.out.println(“开始编码开始编码); public void introduction() System.out.println(大家好!我是大家好!我是“ + school + 的的 + name + 。); 现在,所有子类中相同的代码现在,所有子类中相同的代码都抽取到父类中了都抽取到父类中了 属属性性行行为为姓名姓名所在中心所在中心编码编码自我介绍自我介绍职员职员Java职员职员.NET职员职员面向对象特性继承和多态为什么需
9、要继承为什么需要继承 4-4public class OracleJavaStaff2 extends OracleStaff public OracleJavaStaff2(String myName, String mySchool) super(myName, mySchool);public void giveLesson()System.out.println(“启动启动 javajava开发工具开发工具);super.giveLesson();public class OracleDotNetStaff2 extends OracleStaff public OracleDotNe
10、tStaff2(String myName, String mySchool) super(myName, mySchool);public void giveLesson()System.out.println( 启动启动.N.NETET开发工具开发工具);super.giveLesson();使用继承,可以有效实现代码复用使用继承,可以有效实现代码复用子类自动继承父类的属性子类自动继承父类的属性和方法,子类中不再存在和方法,子类中不再存在重复代码重复代码面向对象特性继承和多态如何实现继承如何实现继承 3-1 在在Java语言中,用语言中,用extends关键字来表示一个类继承了另一关键字来
11、表示一个类继承了另一个类,例如:个类,例如:public class OracleJavaStaff2 extends OracleStaff /其余代码省略其余代码省略 在父类中只定义一些通用的属性与方法,例如:public class OracleStaff private String name; / 职员姓名职员姓名private String school; / 所在中心所在中心public OracleStaff(String myName, String mySchool) /初始化属性值初始化属性值public void giveLesson() /编码方法的具体实现编码方法的
12、具体实现 public void introduction() /自我介绍方法的具体实现自我介绍方法的具体实现 面向对象特性继承和多态如何实现继承如何实现继承 3-2 子类自动继承父类的属性和方法,子类中可以定义特定的子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法属性和方法public class OracleStaff private String name; / 职员姓名职员姓名private String school;/ 所在中心所在中心public OracleStaff (String myName, String mySchool) /初始化属性值初始化属性值pub
13、lic void giveLesson() /编码方法的具体实现编码方法的具体实现 public void introduction() /自我介绍方法的具体实现自我介绍方法的具体实现 public class OracleJavaStaff2 extends OracleStaff public OracleJavaStaff2(String myName, String mySchool) super(myName, mySchool);public void giveLesson()System.out.println(“启动启动java开发工开发工具具);super.giveLesso
14、n();由于由于giveLesson()方法与方法与父类的实现有所不同,因父类的实现有所不同,因此重写了该方法此重写了该方法 方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型 父类中的属性和方法可父类中的属性和方法可以被子类继承以被子类继承面向对象特性继承和多态public class OracleJavaStaff2 extends OracleStaff public OracleJavaStaff2(String myName, String mySchool) super(myName, mySchool);如何实
15、现继承如何实现继承 3-3 子类的构造方法中,通过子类的构造方法中,通过super关键字调用父类的构造方法关键字调用父类的构造方法 方法重写后,通过方法重写后,通过super关键字调用父类的方法关键字调用父类的方法public class OracleJavaStaff2 extends OracleStaff public void giveLesson()System.out.println(启动启动 Eclipse);super.giveLesson();通过调用父类的构造方法,通过调用父类的构造方法,完成对属性值的初始化完成对属性值的初始化面向对象特性继承和多态一切类的一切类的“祖先祖
16、先”Object 在在Java 中,所有的中,所有的Java类都直接或间接地继承了类都直接或间接地继承了java.lang.Object类类public class MyObject /public class MyObect extends Object /在在Eclipse中调用中调用MyObject对象的成员,会自动弹出继对象的成员,会自动弹出继承自承自Object的所有方法的所有方法面向对象特性继承和多态小结小结 1 请编码实现动物世界的继承关系:请编码实现动物世界的继承关系: 动物(动物(Animal)具有行为:吃()具有行为:吃(eat)、睡觉()、睡觉(sleep) 动物包括:兔
17、子(动物包括:兔子(Rabbit),老虎(),老虎(Tiger) 这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。睡觉的行为是一致的。 请通过继承实现以上需求,并编写测试类请通过继承实现以上需求,并编写测试类AnimalTest进行测试。进行测试。 面向对象特性继承和多态继承继承 继承与构造 创建子类的对象会调用子类和父类的构造方法 顺序是先调用父类的构造方法,再调用子类的构造方法 关于继承 Object类是一切类的父类 如果一个类如果继承Object可以省略继承的描述 一个父类可以有多个子类 一个子类只能有一个父类面向对
18、象特性继承和多态继承与构造继承与构造 在继承关系中,因创建子类对象而调用子类的构造方法时 。会在执行子类构造方法时最先调用并执行其直接父类的构造方法。 Object类的构造器总是最先被执行A类类B类类C类类继承继承继承继承构造器的执行顺序构造器的执行顺序1 - A类构造方法类构造方法2 - B类构造方法类构造方法3 - C类构造方法类构造方法面向对象特性继承和多态引用的指向引用的指向1 内存示意图:Student stu = new Student();引用引用实例实例实例地址实例的属性实例实例stu面向对象特性继承和多态引用的指向引用的指向2 父类类型引用指向子类类型实例: 小明在喝水,他喝
19、的真的是“水”么? 小明在喝:可乐、矿泉水、绿茶水水茶饮料茶饮料矿泉水矿泉水碳酸饮料碳酸饮料冰露冰露康师傅康师傅绿茶绿茶冰红茶冰红茶可乐可乐雪碧雪碧面向对象特性继承和多态为什么需要多态为什么需要多态 1-1 坐车去世博园面向对象特性继承和多态为什么需要多态为什么需要多态 2-1 搭车去世博园和 邻 居 搭 讪和 邻 居 搭 讪上车上车 到 目 的 地到 目 的 地道谢道谢下车下车面向对象特性继承和多态为什么需要多态为什么需要多态 2-2 坐火车去世博园买票买票检票检票 上车上车到目的地到目的地下车下车面向对象特性继承和多态为什么需要多态为什么需要多态 2-3 坐公交车去世博园等 车 排 队等
20、车 排 队上车上车 买票买票到 目 的 地到 目 的 地下车下车面向对象特性继承和多态为什么需要多态为什么需要多态 2-4 打出租车去世博园拦车拦车上车上车 到目的地到目的地付 车 钱付 车 钱下车下车面向对象特性继承和多态多态的实现多态的实现1public class Car public void go()public class privateCar extends Carpublic void go() System.out.println(和邻居搭讪和邻居搭讪);System.out.println(上车上车);System.out.println(到目的地到目的地);System.
21、out.println(道谢道谢);System.out.println(下车下车);public class Train extends Carpublic void go() System.out.println(买票买票);System.out.println(检票检票);System.out.println(上车上车);System.out.println(到目的地到目的地);System.out.println(下车下车);public class Bus extends Carpublic void go() System.out.println(等车排队等车排队);System.
22、out.println(上车上车);System.out.println(买票买票);System.out.println(到目的地到目的地);System.out.println(下车下车);public class Texi extends Car public void go() System.out.println(拦车拦车);System.out.println(上车上车);System.out.println(到目的地到目的地);System.out.println(付车钱付车钱);System.out.println(下车下车);子类重写父类的方法子类重写父类的方法面向对象特性继
23、承和多态多态的实现多态的实现2 如何调用? 实现代码父类类型引用指向子类类型实例父类类型引用指向子类类型实例Car car=new Train();car.go();Car car=new Bus();car.go();Car car=new PrivateCar();car.go();Car car=new Texi();car.go();和邻居搭讪和邻居搭讪上车上车 到目的地到目的地道谢道谢下车下车等车排队等车排队上车上车 买票买票到目的地到目的地下车下车买票买票检票检票 上车上车到目的地到目的地下车下车拦车拦车上车上车 到目的地到目的地付车钱付车钱下车下车面向对象特性继承和多态为什么需要
24、多态为什么需要多态 5-1在在Oracle职员类的基础上,开发一个类代表总部,职员类的基础上,开发一个类代表总部,负责对各职员进行评估,评估内容包括:负责对各职员进行评估,评估内容包括: 1、职员的自我介绍、职员的自我介绍 2、职员的授课、职员的授课面向对象特性继承和多态为什么需要多态为什么需要多态 5-2public class HQ1 public void judge(OracleJavaStaff2 t)roduction();t.giveLesson();public void judge(OracleDotNetStaff2 t)roduction();t.gi
25、veLesson();public static void main(String args) HQ1 hq = new HQ1();hq.judge(new OracleJavaStaff2(李明李明,北京中心北京中心“);hq.judge(new OracleDotNetStaff2(张明张明,天津中心天津中心“); 第一种解决方案第一种解决方案大家好!我是北京中心的李明大家好!我是北京中心的李明.启动启动 java开发工具开发工具开始编码开始编码大家好!我是天津中心的张明大家好!我是天津中心的张明.启动启动 .Net开发工具开发工具开始编码开始编码面向对象特性继承和多态为什么需要多态为什
26、么需要多态 5-3 现在,升级现在,升级Oracle职员类,增加一种新类型:职员类,增加一种新类型:OracleDBStaff,该类型的职员专门负责数据库,要求如下:,该类型的职员专门负责数据库,要求如下: 属性:姓名、所属中心属性:姓名、所属中心 方法:编码(启动方法:编码(启动Oracle,开始编码),开始编码) 同时,总部也负责对这类职员进行评估同时,总部也负责对这类职员进行评估面向对象特性继承和多态为什么需要多态为什么需要多态 5-4如果在第一种解决方案的基础上去解决,我们需要如下如果在第一种解决方案的基础上去解决,我们需要如下两个步骤:两个步骤:建立建立OracleDBStaff类类
27、修改总部类,增加方法:修改总部类,增加方法:judge(OracleDBStaff t)每增加一种新的职员类型,都要修改总部类,增加相应的每增加一种新的职员类型,都要修改总部类,增加相应的judge(评估评估)方法,代码的可扩展性及可维护性极差方法,代码的可扩展性及可维护性极差 能找到这个解决方案的弊端吗?能找到这个解决方案的弊端吗?面向对象特性继承和多态为什么需要多态为什么需要多态 5-5 第二种解决方案第二种解决方案使用多态使用多态public class HQ3 public void judge(OracleStaff t)roduction();t.giveLesson()
28、;public static void main(String args) HQ3 hq = new HQ3();hq.judge(new OracleJavaStaff2(李明李明,北京中心北京中心“);hq.judge(new OracleDotNetStaff2(张明张明,天津中心天津中心);hq.judge(new OracleDBStaff(“李岚李岚,北京中心北京中心“);可以接收子类类型可以接收子类类型根据实际创建的对象根据实际创建的对象类型调用相应方法类型调用相应方法大家好!我是北京中心的李明大家好!我是北京中心的李明.启动启动 java开发工具开发工具开始编码开始编码大家好!
29、我是天津中心的张明大家好!我是天津中心的张明.启动启动 .Net开发工具开发工具开始编码开始编码大家好!我是北京中心的李岚大家好!我是北京中心的李岚.启动启动 Oracle开始编码开始编码控制台输出控制台输出使用多态之后,当需要增加新的子类类型时,无需更改使用多态之后,当需要增加新的子类类型时,无需更改总部类,程序的可扩展性及可维护性增强总部类,程序的可扩展性及可维护性增强 面向对象特性继承和多态什么是多态什么是多态 简单来说,多态是具有表现多种形态的能力的特征简单来说,多态是具有表现多种形态的能力的特征 同一个实现接口,使用不同的实例而执行不同操作同一个实现接口,使用不同的实例而执行不同操作
30、彩色打印机彩色打印机 打印机打印机 黑白打印机黑白打印机打印效果:彩色打印效果:彩色打印效果:黑白打印效果:黑白打印打印 打印打印 面向对象特性继承和多态public class OracleStaff public void giveLesson() System.out.println(“开始编码开始编码); public class Test public static void main(String args) HQ3 hq = new HQ3(); hq.judge(new OracleDBStaff(); 3如何实现多态如何实现多态1、子类重写父类的方法、子类重写父类的方法2、编
31、写方法时,使用父类定义的方法、编写方法时,使用父类定义的方法3、运行时,根据实际创建的对象类型动态决定使用哪个方法、运行时,根据实际创建的对象类型动态决定使用哪个方法public class OracleDBStaff extends OracleStaff public void giveLesson() System.out.println(启动启动 Oracle); super.giveLesson(); 1public class HQ3 public void judge(OracleStaff t) t.giveLesson(); 2面向对象特性继承和多态小结小结 2 请编码实现如
32、下需求:请编码实现如下需求: 乐器(乐器(Instrument)分为:钢琴)分为:钢琴(Piano)、小提琴、小提琴(Violin) 各种乐器的弹奏(各种乐器的弹奏( play )方法各不相同。)方法各不相同。 编写一个测试类编写一个测试类InstrumentTest,要求:,要求: 编写方法编写方法testPlay,对各种乐器进行弹奏测试。要依据乐器的不同,对各种乐器进行弹奏测试。要依据乐器的不同,进行相应的弹奏。进行相应的弹奏。 在在main方法中进行测试方法中进行测试面向对象特性继承和多态总结总结 2-1class Base public String name;public Base()name = Base;public Base(String pName)name = pName;public void method()System.out.println(name);class Child extends Basepublic Child()super(Child1);name=Child2;给定如下给定如下Java代码,编译运行后,输出结果是什么?代码,编译运行后,输出结果是什么?public
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 管井房电缆改造合同
- 广告导演聘用合同
- 合同标准质量范文
- 犬耳螨的诊断与治疗
- 2024正规厂房租赁合同书
- 煤矿安全规程
- 2024设备改造的合同范本
- 2024专卖店申请加盟合同模板
- 2024家庭装修全包合同
- 专题06课文理解与填空-2022-2023学年四年级语文上册期末复习知识点精讲精练(部编版)
- 企业级SaaS软件服务合同
- 【期中考后反思】《反躬自省,砥砺奋进》-2022-2023学年初中主题班会课件
- 2019新教材人教版生物必修1教材课后习题答案
- 2024年中国白酒行业数字化转型研究报告-36氪-202409
- 《学校主人公:3 校园广播站》教学设计-2024-2025学年五年级上册综合实践活动沪科黔科版
- 外伤急救包扎技术说课课件
- 人教版(2024新版)七年级上册英语全册语法知识点讲义
- 全国青岛版信息技术七年级下册专题一第8课三、《高级统计-数据透视表》教学设计
- 内分泌科品管圈成果汇报提高糖尿病患者健康教育知晓率
- 2024年秋季新人教版七年级数学上册教学课件 第五章 一元一次方程 5.3实际问题与一元一次方程(第4课时)
- 清淡的晚餐(课件)六年级上册劳动北京版
评论
0/150
提交评论