面向对象特性继承和多态.ppt_第1页
面向对象特性继承和多态.ppt_第2页
面向对象特性继承和多态.ppt_第3页
面向对象特性继承和多态.ppt_第4页
面向对象特性继承和多态.ppt_第5页
已阅读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 代码存在重复 违背了 writeoncerunanywhere 的原则 9 为什么需要继承4 3 如何改进 有没有可能建立继承关系 让子类自动继承父类的属性和方法 Java职员是职员吗 NET职员是职员吗 publicclassOracleStaff privateStringname 职员姓名privateStringschool 所在中心publicOracleStaff StringmyName StringmySchool name myName school mySchool publicvoidgiveLesson System out println 开始编码 publicvoidintroduction System out println 大家好 我是 school 的 name 现在 所有子类中相同的代码都抽取到父类中了 10 为什么需要继承4 4 publicclassOracleJavaStaff2extendsOracleStaff publicOracleJavaStaff2 StringmyName StringmySchool super myName mySchool publicvoidgiveLesson System out println 启动java开发工具 super giveLesson publicclassOracleDotNetStaff2extendsOracleStaff publicOracleDotNetStaff2 StringmyName StringmySchool super myName mySchool publicvoidgiveLesson System out println 启动 NET开发工具 super giveLesson 使用继承 可以有效实现代码复用 子类自动继承父类的属性和方法 子类中不再存在重复代码 11 如何实现继承3 1 在Java语言中 用extends关键字来表示一个类继承了另一个类 例如 publicclassOracleJavaStaff2extendsOracleStaff 其余代码省略 在父类中只定义一些通用的属性与方法 例如 publicclassOracleStaff privateStringname 职员姓名privateStringschool 所在中心publicOracleStaff StringmyName StringmySchool 初始化属性值 publicvoidgiveLesson 编码方法的具体实现 publicvoidintroduction 自我介绍方法的具体实现 12 如何实现继承3 2 子类自动继承父类的属性和方法 子类中可以定义特定的属性和方法 publicclassOracleStaff privateStringname 职员姓名privateStringschool 所在中心publicOracleStaff StringmyName StringmySchool 初始化属性值 publicvoidgiveLesson 编码方法的具体实现 publicvoidintroduction 自我介绍方法的具体实现 publicclassOracleJavaStaff2extendsOracleStaff publicOracleJavaStaff2 StringmyName StringmySchool super myName mySchool publicvoidgiveLesson System out println 启动java开发工具 super giveLesson 由于giveLesson 方法与父类的实现有所不同 因此重写了该方法 方法重写 子类和父类的方法具有相同的名称 参数列表 返回类型 父类中的属性和方法可以被子类继承 13 publicclassOracleJavaStaff2extendsOracleStaff publicOracleJavaStaff2 StringmyName StringmySchool super myName mySchool 如何实现继承3 3 子类的构造方法中 通过super关键字调用父类的构造方法 方法重写后 通过super关键字调用父类的方法 publicclassOracleJavaStaff2extendsOracleStaff publicvoidgiveLesson System out println 启动Eclipse super giveLesson 通过调用父类的构造方法 完成对属性值的初始化 14 一切类的 祖先 Object 在Java中 所有的Java类都直接或间接地继承了java lang Object类 publicclassMyObject publicclassMyObectextendsObject 在Eclipse中调用MyObject对象的成员 会自动弹出继承自Object的所有方法 15 小结1 请编码实现动物世界的继承关系 动物 Animal 具有行为 吃 eat 睡觉 sleep 动物包括 兔子 Rabbit 老虎 Tiger 这些动物吃的行为各不相同 兔子吃草 老虎吃肉 但睡觉的行为是一致的 请通过继承实现以上需求 并编写测试类AnimalTest进行测试 16 继承 继承与构造创建子类的对象会调用子类和父类的构造方法顺序是先调用父类的构造方法 再调用子类的构造方法关于继承Object类是一切类的父类如果一个类如果继承Object可以省略继承的描述一个父类可以有多个子类一个子类只能有一个父类 17 继承与构造 在继承关系中 因创建子类对象而调用子类的构造方法时 会在执行子类构造方法时最先调用并执行其直接父类的构造方法 Object类的构造器总是最先被执行 构造器的执行顺序1 A类构造方法2 B类构造方法3 C类构造方法 18 引用的指向1 内存示意图 Studentstu newStudent 实例 stu 19 引用的指向2 父类类型引用指向子类类型实例 小明在喝水 他喝的真的是 水 么 小明在喝 可乐 矿泉水 绿茶 水 20 为什么需要多态1 1 坐车去世博园 21 为什么需要多态2 1 搭车去世博园 和邻居搭讪上车到目的地道谢下车 22 为什么需要多态2 2 坐火车去世博园 买票检票上车到目的地下车 23 为什么需要多态2 3 坐公交车去世博园 等车排队上车买票到目的地下车 24 为什么需要多态2 4 打出租车去世博园 拦车上车到目的地付车钱下车 25 多态的实现1 publicclassCar publicvoidgo publicclassprivateCarextendsCar publicvoidgo System out println 和邻居搭讪 System out println 上车 System out println 到目的地 System out println 道谢 System out println 下车 publicclassTrainextendsCar publicvoidgo System out println 买票 System out println 检票 System out println 上车 System out println 到目的地 System out println 下车 publicclassBusextendsCar publicvoidgo System out println 等车排队 System out println 上车 System out println 买票 System out println 到目的地 System out println 下车 publicclassTexiextendsCar publicvoidgo System out println 拦车 System out println 上车 System out println 到目的地 System out println 付车钱 System out println 下车 子类重写父类的方法 26 多态的实现2 如何调用 实现代码 父类类型引用指向子类类型实例 Carcar newTrain car go Carcar newBus car go Carcar newPrivateCar car go Carcar newTexi car go 和邻居搭讪上车到目的地道谢下车 等车排队上车买票到目的地下车 买票检票上车到目的地下车 拦车上车到目的地付车钱下车 27 为什么需要多态5 1 在Oracle职员类的基础上 开发一个类代表总部 负责对各职员进行评估 评估内容包括 1 职员的自我介绍2 职员的授课 28 为什么需要多态5 2 publicclassHQ1 publicvoidjudge OracleJavaStaff2t t introduction t giveLesson publicvoidjudge OracleDotNetStaff2t t introduction t giveLesson publicstaticvoidmain String args HQ1hq newHQ1 hq judge newOracleJavaStaff2 李明 北京中心 hq judge newOracleDotNetStaff2 张明 天津中心 第一种解决方案 大家好 我是北京中心的李明 启动java开发工具开始编码大家好 我是天津中心的张明 启动 Net开发工具开始编码 控制台输出 29 为什么需要多态5 3 现在 升级Oracle职员类 增加一种新类型 OracleDBStaff 该类型的职员专门负责数据库 要求如下 属性 姓名 所属中心方法 编码 启动Oracle 开始编码 同时 总部也负责对这类职员进行评估 30 为什么需要多态5 4 如果在第一种解决方案的基础上去解决 我们需要如下两个步骤 建立OracleDBStaff类修改总部类 增加方法 judge OracleDBStafft 每增加一种新的职员类型 都要修改总部类 增加相应的judge 评估 方法 代码的可扩展性及可维护性极差 能找到这个解决方案的弊端吗 31 为什么需要多态5 5 第二种解决方案 使用多态 publicclassHQ3 publicvoidjudge OracleStafft t introduction t giveLesson publicstaticvoidmain String args HQ3hq newHQ3 hq judge newOracleJavaStaff2 李明 北京中心 hq judge newOracleDotNetStaff2 张明 天津中心 hq judge newOracleDBStaff 李岚 北京中心 可以接收子类类型 根据实际创建的对象类型调用相应方法 大家好 我是北京中心的李明 启动java开发工具开始编码大家好 我是天津中心的张明 启动 Net开发工具开始编码大家好 我是北京中心的李岚 启动Oracle开始编码 控制台输出 使用多态之后 当需要增加新的子类类型时 无需更改总部类 程序的可扩展性及可维护性增强 32 什么是多态 简单来说 多态是具有表现多种形态的能力的特征同一个实现接口 使用不同的实例而执行不同操作 彩色打印机 打印机 黑白打印机 打印效果 彩色 打印效果 黑白 打印 打印 33 publicclassOracleStaff publicvoidgiveLesson System out println 开始编码 如何实现多态 1 子类重写父类的方法2 编写方法时 使用父类定义的方法3 运行时 根据实际创建的对象类型动态决定使用哪个方法 34 小结2 请编码实现如下需求 乐器 Instrument 分为 钢琴 Piano 小提琴 Violin 各种乐器的弹奏 play 方法各不相同 编写一个测试类InstrumentTest 要求 编写方法testPlay 对各种乐器进行弹奏测试 要依据乐器的不同 进行相应的弹奏 在main方法中进行测试 35 总结2 1 classBase publicStringname publicBase name Base publicBase StringpName name pName publicvoidmethod System out println name classChildextendsBase publicChild super Child1 name Child2 给定如下Java代码 编译运行后 输出结果是什么 publicclassSample publicstaticvoidmain String args Childc newChild c method Child2 控制台输出 1 2 3 36 总结2 2 给定如下Java代码 编译运行后 输出结果是什么 publicclassOracleStaff publicvoidgiveLesson System out println 开始编码 publicclassOracleDBStaffextendsOracleSt

温馨提示

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

最新文档

评论

0/150

提交评论