版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 OracleDotNet
5、Staff(String myName, 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; / 职
6、员姓名职员姓名private String 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 + 的的 +
7、name + .); 代码存在重复,违背了代码存在重复,违背了“write once run anywhere”的原则的原则 面向对象特性继承和多态为为什什么么需要需要继继承承 4-3 如何改如何改进进?有?有没没有可能建立有可能建立继继承承关关系,系,让让子子类类自自动继动继承父承父类类的的属属性和方法?性和方法?Java职员是职员吗?职员是职员吗?.NET职员是职员吗?职员是职员吗?public class OracleStaff private String name; / 职员姓名职员姓名private String school; / 所在中心所在中心public OracleSta
8、ff(String myName, String 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(“启动启动 java java开发工具开发工具);super.giveLesson();public class OracleDotNetStaff2 extends OracleStaf
10、f public OracleDotNetStaff2(String myName, String mySchool) super(myName, mySchool);public void giveLesson()System.out.println( 启动启动.NET.NET开发工具开发工具);super.giveLesson();使用继承,可以有效实现代码复用使用继承,可以有效实现代码复用子类自动继承父类的属性子类自动继承父类的属性和方法,子类中不再存在和方法,子类中不再存在重复代码重复代码面向对象特性继承和多态如何如何实现继实现继承承 3-1 在在Java语语言中,用言中,用exten
11、ds关键关键字字来来表示一表示一个类继个类继承了另一承了另一个类个类,例如:,例如:public class OracleJavaStaff2 extends OracleStaff /其余代码省略其余代码省略 在父类中只定义一些通用的属性与方法,例如:public class OracleStaff private String name; / 职员姓名职员姓名private String school; / 所在中心所在中心public OracleStaff(String myName, String mySchool) /初始化属性值初始化属性值public void giveLess
12、on() /编码方法的具体实现编码方法的具体实现 public void introduction() /自我介绍方法的具体实现自我介绍方法的具体实现 面向对象特性继承和多态如何如何实现继实现继承承 3-2 子子类类自自动继动继承父承父类类的的属属性和方法,子性和方法,子类类中可以定中可以定义义特定的特定的属属性和方法性和方法public class OracleStaff private String name; / 职员姓名职员姓名private String school;/ 所在中心所在中心public OracleStaff (String myName, String myScho
13、ol) /初始化属性值初始化属性值public 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开发工开发
14、工具具);super.giveLesson();由于由于giveLesson()方法与方法与父类的实现有所不同,因父类的实现有所不同,因此重写了该方法此重写了该方法 方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型 父类中的属性和方法可父类中的属性和方法可以被子类继承以被子类继承面向对象特性继承和多态public class OracleJavaStaff2 extends OracleStaff public OracleJavaStaff2(String myName, String mySchool) super(m
15、yName, mySchool);如何如何实现继实现继承承 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)具有行)具有行为为:吃(:吃(ea
17、t)、睡)、睡觉觉(sleep) 动动物包括:物包括:兔兔子(子(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 坐火车去世博园买票买票检票检票 上车上车到 目 的到 目 的地地下车下车面向对象特性继承和多态为为什什么么需要多需
20、要多态态 2-3 坐公交车去世博园等 车 排 队等 车 排 队上车上车 买票买票到 目 的 地到 目 的 地下车下车面向对象特性继承和多态为为什什么么需要多需要多态态 2-4 打出租车去世博园拦车拦车上车上车 到 目 的到 目 的地地付 车 钱付 车 钱下车下车面向对象特性继承和多态多多态态的的实现实现1public class Car public void go()public class privateCar extends Carpublic void go() System.out.println(和邻居搭讪和邻居搭讪);System.out.println(上车上车);System
21、.out.println(到目的地到目的地);System.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
22、.out.println(等车排队等车排队);System.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(OracleDotNetSt
25、aff2 t)roduction();t.giveLesson();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如果在第一如果在第一种种解解决决方案的基方案的基础础上去解上去解决决,我,我们们需要如下需要如下两个两个步步
27、骤骤:建立建立OracleDBStaff类类修改修改总总部部类类,增加方法:,增加方法:judge(OracleDBStaff t)每增加一种新的职员类型,都要修改总部类,增加相应的每增加一种新的职员类型,都要修改总部类,增加相应的judge(评估评估)方法,代码的可扩展性及可维护性极差方法,代码的可扩展性及可维护性极差 能找到这个解决方案的弊端吗?能找到这个解决方案的弊端吗?面向对象特性继承和多态为为什什么么需要多需要多态态 5-5 第二第二种种解解决决方案方案使用多使用多态态public class HQ3 public void judge(OracleStaff t)rodu
28、ction();t.giveLesson();public static void main(String args) HQ3 hq = new HQ3();hq.judge(new OracleJavaStaff2(李明李明,北京中心北京中心“);hq.judge(new OracleDotNetStaff2(张明张明,天津中心天津中心);hq.judge(new OracleDBStaff(“李岚李岚,北京中心北京中心“);可以接收子类类型可以接收子类类型根据实际创建的对象根据实际创建的对象类型调用相应方法类型调用相应方法大家好!我是北京中心的李明大家好!我是北京中心的李明.启动启动 ja
29、va开发工具开发工具开始编码开始编码大家好!我是天津中心的张明大家好!我是天津中心的张明.启动启动 .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、
31、子、子类类重重写写父父类类的方法的方法2、编写编写方法方法时时,使用父,使用父类类定定义义的方法的方法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面向对象
32、特性继承和多态小小结结 2 请编码实现请编码实现如下需求:如下需求: 乐乐器(器(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 class S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电法勘探工安全应急知识考核试卷含答案
- 制浆废液回收利用工安全专项知识考核试卷含答案
- 有色矿石磨细工变革管理水平考核试卷含答案
- 水声换能器密封工岗前培训效果考核试卷含答案
- 乳品加工工安全理论知识考核试卷含答案
- 瓦斯防突工岗中体系认证考核试卷含答案
- 梳理化学粘合非织造布制作工工作改进水平考核试卷含答案
- 露天采矿工岗前操作知识考核试卷含答案
- 纤维检验员安全意识强化考核试卷含答案
- 口腔设备组装调试工10S考核试卷含答案
- 教师心灵自我关怀 守护身心双向健康课件
- 2026年广东省考试录用公务员《行政执法专业和申论》试题附答案
- 自控系统现场验收测试 (SAT) 报告模板(完整版含安装后功能验证)
- 2026年员额法官遴选面试题及答案
- 2026年化工安全生产专业实务模拟试卷(2套)
- 肌少症防治科普课件
- 2026秋季新学期班干部聘任仪式
- 高三物理一轮复习的几点建议
- 2026年党课党校考试题库及答案
- 《地质勘探质量控制管理手册》
- 学习通《科研诚信与学术规范》课后及考试答案
评论
0/150
提交评论