




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象特性: 继承和多态,2,回顾,在Java程序中,代码封装带给我们的好处是什么? 举例说明什么是方法重载? Java中的构造方法与实例方法,有什么区别?,3,本章任务,升级HelloWorld,输出Oracle职员的基本信息: 使用继承提高代码的复用性 使用多态提高代码的可扩展性及可维护性,4,掌握继承 掌握super关键字 掌握多态,本章目标,5,生活中的继承 2-1,生活中,继承的例子随处可见,动物,食草动物,食肉动物,谁是父类? 谁是子类? 能说出继承的特点吗?,继承需要符合的关系:is-a,父类更通用、子类更具体,6,生活中的继承 2-2,子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性,巴士是汽车吗? 卡车是汽车吗? 出租车是汽车吗?,汽车,请问:出租车包含哪些属性和行为呢?,7,为什么需要继承 4-1,开发Oracle职员类,其中职员分为Java职员以及.NET职员,各自的要求如下: Java职员 属性:姓名、所属中心 方法:编写代码(步骤:启动java开发工具、开始编码)、自我介绍 .NET职员 属性:姓名、所属中心 方法:编写代码(步骤:启动.NET开发工具、开始编码)、自我介绍,8,请问:以下这个解决方案中存在着什么问题?,为什么需要继承 4-2,代码存在重复,违背了“write once run anywhere”的原则,9,为什么需要继承 4-3,如何改进?有没有可能建立继承关系,让子类自动继承父类的属性和方法?,Java职员是职员吗? .NET职员是职员吗?,public class OracleStaff private String name; / 职员姓名 private String school; / 所在中心 public OracleStaff(String myName, String mySchool) name = myName; school = mySchool; public void giveLesson() System.out.println(“开始编码“); public void introduction() System.out.println(“大家好!我是“ + school + “的“ + name + “。“); ,现在,所有子类中相同的代码都抽取到父类中了,10,为什么需要继承 4-4,public class OracleJavaStaff2 extends OracleStaff public OracleJavaStaff2(String myName, String mySchool) super(myName, mySchool); public void giveLesson() System.out.println(“启动 java开发工具“); super.giveLesson(); ,public class OracleDotNetStaff2 extends OracleStaff public OracleDotNetStaff2(String myName, String mySchool) super(myName, mySchool); public void giveLesson() System.out.println(“ 启动.NET开发工具“); super.giveLesson(); ,使用继承,可以有效实现代码复用,子类自动继承父类的属性和方法,子类中不再存在重复代码,11,如何实现继承 3-1,在Java语言中,用extends关键字来表示一个类继承了另一个类,例如:,public class OracleJavaStaff2 extends OracleStaff /其余代码省略 ,在父类中只定义一些通用的属性与方法,例如:,public class OracleStaff private String name; / 职员姓名 private String school; / 所在中心 public OracleStaff(String myName, String mySchool) /初始化属性值 public void giveLesson() /编码方法的具体实现 public void introduction() /自我介绍方法的具体实现 ,12,如何实现继承 3-2,子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法,public class OracleStaff private String name; / 职员姓名 private String school;/ 所在中心 public OracleStaff (String myName, String mySchool) /初始化属性值 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开发工具“); super.giveLesson(); ,由于giveLesson()方法与父类的实现有所不同,因此重写了该方法,方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型,父类中的属性和方法可以被子类继承,13,public class OracleJavaStaff2 extends OracleStaff public OracleJavaStaff2(String myName, String mySchool) super(myName, mySchool); ,如何实现继承 3-3,子类的构造方法中,通过super关键字调用父类的构造方法,方法重写后,通过super关键字调用父类的方法,public class OracleJavaStaff2 extends OracleStaff public void giveLesson() System.out.println(“启动 Eclipse“); super.giveLesson(); ,通过调用父类的构造方法,完成对属性值的初始化,14,一切类的“祖先”Object,在Java 中,所有的Java类都直接或间接地继承了java.lang.Object类,public class MyObject / ,public class MyObect extends Object / ,在Eclipse中调用MyObject对象的成员,会自动弹出继承自Object的所有方法,15,小结 1,请编码实现动物世界的继承关系: 动物(Animal)具有行为:吃(eat)、睡觉(sleep) 动物包括:兔子(Rabbit),老虎(Tiger) 这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。 请通过继承实现以上需求,并编写测试类AnimalTest进行测试。,16,继承,继承与构造 创建子类的对象会调用子类和父类的构造方法 顺序是先调用父类的构造方法,再调用子类的构造方法 关于继承 Object类是一切类的父类 如果一个类如果继承Object可以省略继承的描述 一个父类可以有多个子类 一个子类只能有一个父类,17,继承与构造,在继承关系中,因创建子类对象而调用子类的构造方法时 。会在执行子类构造方法时最先调用并执行其直接父类的构造方法。 Object类的构造器总是最先被执行,构造器的执行顺序 1 - A类构造方法 2 - B类构造方法 3 - C类构造方法,引用的指向1,内存示意图:,Student stu = new Student();,实例,stu,19,引用的指向2,父类类型引用指向子类类型实例: 小明在喝水,他喝的真的是“水”么? 小明在喝:可乐、矿泉水、绿茶,水,20,为什么需要多态 1-1,坐车去世博园,21,为什么需要多态 2-1,搭车去世博园,和邻居搭讪 上车 到目的地 道谢 下车,22,为什么需要多态 2-2,坐火车去世博园,买票 检票 上车 到目的地 下车,23,为什么需要多态 2-3,坐公交车去世博园,等车排队 上车 买票 到目的地 下车,24,为什么需要多态 2-4,打出租车去世博园,拦车 上车 到目的地 付车钱 下车,25,多态的实现1,public class Car public void go() ,public class privateCar extends Car public void go() System.out.println(“和邻居搭讪“); System.out.println(“上车“); System.out.println(“到目的地“); System.out.println(“道谢“); System.out.println(“下车“); ,public class Train extends Car public void go() System.out.println(“买票“); System.out.println(“检票“); System.out.println(“上车“); System.out.println(“到目的地“); System.out.println(“下车“); ,public class Bus extends Car public void go() System.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(“下车“); ,子类重写父类的方法,26,多态的实现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();,和邻居搭讪 上车 到目的地 道谢 下车,等车排队 上车 买票 到目的地 下车,买票 检票 上车 到目的地 下车,拦车 上车 到目的地 付车钱 下车,27,为什么需要多态 5-1,在Oracle职员类的基础上,开发一个类代表总部,负责对各职员进行评估,评估内容包括: 1、职员的自我介绍 2、职员的授课,28,为什么需要多态 5-2,public class HQ1 public void judge(OracleJavaStaff2 t) roduction(); t.giveLesson(); public void judge(OracleDotNetStaff2 t) roduction(); t.giveLesson(); public static void main(String args) HQ1 hq = new HQ1(); hq.judge(new OracleJavaStaff2(“李明“,“北京中心“); hq.judge(new OracleDotNetStaff2(“张明“,“天津中心“); ,第一种解决方案,大家好!我是北京中心的李明. 启动 java开发工具 开始编码 大家好!我是天津中心的张明. 启动 .Net开发工具 开始编码,控制台输出,29,为什么需要多态 5-3,现在,升级Oracle职员类,增加一种新类型:OracleDBStaff,该类型的职员专门负责数据库,要求如下: 属性:姓名、所属中心 方法:编码(启动Oracle,开始编码) 同时,总部也负责对这类职员进行评估,30,为什么需要多态 5-4,如果在第一种解决方案的基础上去解决,我们需要如下两个步骤: 建立OracleDBStaff类 修改总部类,增加方法:judge(OracleDBStaff t),每增加一种新的职员类型,都要修改总部类,增加相应的judge(评估)方法,代码的可扩展性及可维护性极差,能找到这个解决方案的弊端吗?,31,为什么需要多态 5-5,第二种解决方案使用多态,public class HQ3 public void judge(OracleStaff t) roduction(); t.giveLesson(); public static void main(String args) HQ3 hq = new HQ3(); hq.judge(new OracleJavaStaff2(“李明“,“北京中心“); hq.judge(new OracleDotNetStaff2(“张明“,“天津中心“); hq.judge(new OracleDBStaff(“李岚“,“北京中心“); ,可以接收子类类型,根据实际创建的对象类型调用相应方法,大家好!我是北京中心的李明. 启动 java开发工具 开始编码 大家好!我是天津中心的张明. 启动 .Net开发工具 开始编码 大家好!我是北京中心的李岚. 启动 Oracle 开始编码,控制台输出,使用多态之后,当需要增加新的子类类型时,无需更改总部类,程序的可扩展性及可维护性增强,32,什么是多态,简单来说,多态是具有表现多种形态的能力的特征 同一个实现接口,使用不同的实例而执行不同操作,彩色打印机,打印机,黑白打印机,打印效果:彩色,打印效果:黑白,打印,打印,33,public class OracleStaff public void giveLesson() System.out.println(“开始编码“); ,如何实现多态,1、子类重写父类的方法 2、编写方法时,使用父类定义的方法 3、运行时,根据实际创建的对象类型动态决定使用哪个方法,34,小结 2,请编码实现如下需求: 乐器(Instrument)分为:钢琴(Piano)、小提琴(Violin) 各种乐器的弹奏( play )方法各不相同。 编写一个测试类InstrumentTest,要求: 编写方法testPlay,对各种乐器进行弹奏测试。要依据乐器的不同,进行相应的弹奏。 在main方法中进行测试,35,总结 2-1,class Base public String name; public Base() name = “Base“; public Base(String pName) name = pName; public void method() System.out.println(name); ,class Child extends Base public Child() super(“Child1“); name=“Child2“; ,给定如下Java代码,编译运行后,输出结果是什么?,public class Sample public static void main(String args) Child c = new Child(); c.method(); ,Child2,控制台输出,1,2,3,36,总结 2-2,给定如下Java代码,编译运行后,输出结果是什么?,public class OracleStaff public void giveLesson() System.out.println(“开始编码“); ,public class OracleDBSta
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年滨州市中级人民法院招聘司法工作人员考试笔试试卷【附解析】
- 2025就业援疆浙江省事业单位招聘阿克苏籍少数民族高校毕业生(7人)考试参考题库附答案解析
- 押题宝典教师招聘之《小学教师招聘》通关考试题库及答案详解【夺冠系列】
- 教师招聘之《幼儿教师招聘》强化训练高能附参考答案详解【轻巧夺冠】
- 2025年教师招聘之《幼儿教师招聘》题库附参考答案详解(培优b卷)
- 教师招聘之《小学教师招聘》综合检测模拟卷(模拟题)附答案详解
- 教师招聘之《小学教师招聘》考前冲刺模拟题库提供答案解析及答案详解【新】
- 2025年教师招聘之《小学教师招聘》考前冲刺模拟题库附答案详解【能力提升】
- 2025年教师招聘之《小学教师招聘》试卷及参考答案详解【巩固】
- 2025年教师招聘之《幼儿教师招聘》测试卷及完整答案详解1套
- 2025留置辅警笔试题库及答案
- 胸椎后纵韧带骨化症
- 2025年秋季小学三年级上册语文教学计划
- 2025未签合同劳动争议仲裁申请书
- 耳前瘘管继发感染诊疗要点
- 2025年北京中考真题英语试题及答案
- 2025年浙江省中考社会试题卷(含答案)
- 捐资奖学金活动方案
- 2025至2030中国螺纹插装阀行业项目调研及市场前景预测评估报告
- 机关档案管理工作培训
- 孤独症相关培训课件
评论
0/150
提交评论