第五章_java语言_继承与多态_第1页
第五章_java语言_继承与多态_第2页
第五章_java语言_继承与多态_第3页
第五章_java语言_继承与多态_第4页
第五章_java语言_继承与多态_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

JAVA面向对象程序设计 第五章继承与多态 本章的内容与目标重载继承抽象类与接口 消息 消息用于在对象之间进行交互单独的对象是没有什么用的 多个对象联系在一起才会有完整的功能 对象之间是通过消息相互联系和相互作用的 对象的行为由方法来实现 消息传递是对象之间进行交互的主要方式 一条消息一般包括 接受消息的对象 目标对象 需要执行的操作 目标方法 方法所传递的参数 消息 消息例 多态 多态 Polymorphism 顾名思义 按字面的意思就是 多种状态 形态 在面向对象语言中 同一种方法可能有的多种不同的实现方式 即为多态多态是面向对象的基石之一 使对象可以根据自身的特性以不同的方式运作多态分为静态多态和动态多态两种静态多态是在系统编译时就可以调用哪个方法 如重载动态多态是只有在具体对象运行时才能够确定 如覆盖 重载 重载 类 方法 方法参数 方法实现 喂鸟食 遛鸟 喂猫食 逗着玩 喂狗食 遛狗 饲养者 为什么要重载 例 养宠物 重载 为什么要重载 例 养宠物通过上图我们可以分析得到 饲养者被抽象为一个类 饲养者有3个同名方法 名字都叫都是喂养 这3个方法的参数各不相同 分别是鹦鹉 猫 狗 这3个方法的实现各不相同 重载 类 方法 方法参数 方法实现 拼钱包 老爸 拼学习 潜力 拼承受力 同学 为什么要重载 例 恋爱生涯 重载 同学 为什么要重载 例 恋爱生涯 重载 重载最常用的一个重载 打开eclipse建立一个新的java项目建立一个新的带主方法的class输入System out printl 重载 重载最常用的重载 重载 重载再看一个例子 重载 重载方法重载的特点是 在同一个类中发生 方法名相同 参数列表不同 个数不同顺序不同类型不同Java的自动类型转换也适用于重载方法的自变量 重载 重载写一个求面积类利用重载求圆 三角形 矩形 梯形的面积 继承 继承 继承现实生活中的继承 财产 儿子继承了父亲的财产事业 儿子继承了父亲的事业志向 儿子继承了父亲的志向共同点 财产 事业以及梦想的重复使用面向对象中的继承核心在于代码的重用问题继承是利用现有的类创建新类的过程现有的类称作基类 父类或超类创建的新类称作派生类 子类 继承 继承继承 子类自动地 隐含地拥有其父类 以及更上层的父类 中定义的全部或部分属性和方法 称作子类对父类的继承 继承是能自动传播代码和重用代码的有力工具 子类继承父类的属性和方法 在比较一般的类的基础上建造 建立和扩充新类 继承 继承的例子 动物 食草动物 食肉动物 谁是父类 谁是子类 能说出继承的特点吗 继承 继承的例子父类与子类 巴士是汽车吗 卡车是汽车吗 出租车是汽车吗 汽车 出租车包含哪些特殊属性和行为呢 继承 继承继承简化了人们对事物的认识和描述 能清晰体现相关类与类之间的层次结构关系 提供软件复用功能 减少代码和数据的冗余度适应大型软件设计分工越来越细的趋势通过增强一致性来减少模块间的接口和界面 从而增强了程序的可维护性 继承是单方向的 即子类可以继承和访问父类中的成员 但父类则无法访问子类中新定义的成员 继承 继承一个父类可以派生出多个子类但是 Java中只允许单一继承方式 即一个子类只能继承于一个父类不能象C 中派生类继承于多个基类的多重继承方式Java允许通过接口机制实现多重继承 继承 子类的声明格式如下 class子类名extends父类名 如果一个类的声明中没有使用extends关键字 是否存在继承关系 所有的类均继承自Java lang Object 继承 子类的继承子类和父类同包子类继承其父类中非private的成员变量和非private的成员方法作为自己的成员变量和方法 继承的成员变量或方法的访问权限保持不变 子类和父类不同包子类继承了父类的protected public成员变量和方法做为子类的成员变量和方法 继承的成员或方法的访问权限保持不变 继承 继承一个简单的例子 继承 子类的隐藏与重写如果类中声明的成员变量和父类中的成员变量同名时 子类就隐藏了继承的成员变量 即 子类重新定义了这个变量如果子类中定义的方法的名字 参数个数 参数的类型和父类的方法完全相同 子类就隐藏了父类的方法 即 子类重写 覆盖 了这个方法overwrite 继承 子类的隐藏与重写 继承 super关键字用于使用被隐藏或重写的父类成员和方法 继承 构造方法的继承自动继承父类的无参构造父类无参 子类有参 先执行父类构造 再执行子类构造父类有参子类用super 参数 语句在自己的构造方法中调用必须是子类构造方法中的第一条语句如果父类的构造方法执行失败 那么子类的对象也将无法实例化 继承 构造方法的继承 继承 构造方法的继承 对吗 如何修改 继承 子类的上溯设A类是B类的父类 当用子类创建一个对象 并把这个对象的引用放到父类的对象中时 称为上溯或上转型 如 Aa a newB 或Aa Bb newB a b 上溯对象拥有继承或隐藏的变量 父类 以及继承或改写 子类 的方法 但没有子类中新定义的成员和方法不可以将父类创建的对象的引用赋值给子类声明的对象 继承 子类的上溯以下程序的输出 继承 继承与多态例 开发教师类 其中教师分为Java教师以及c 教师 各自的要求如下 Java教师属性 姓名 系所方法 授课 步骤 打开Eclipse 讲解 提问 自我介绍c 教师属性 姓名 系所方法 授课 步骤 打开Visualc 6 0 讲解 提问 自我介绍 继承 不使用继承 publicclassCTeacher privateStringname 姓名privateStringdepartment 系publicCTeacher StringmyName StringmyDe name myName department myDe publicvoidgiveLession System out println 启动VisualC 6 0 System out println 知识点讲解 System out println 总结提问 publicvoidintroduction System out println 大家好 我是 department 的 name publicclassJavaTeacher privateStringname 姓名privateStringdepartment 系publicJavaTeacher StringmyName StringmyDe name myName department myDe publicvoidgiveLession System out println 启动Eclipse System out println 知识点讲解 System out println 总结提问 publicvoidintroduction System out println 大家好 我是 department 的 name 继承 使用继承 publicclassTeacher privateStringname 教员姓名privateStringdepartment 所在中心publicAccpTeacher StringmyName StringmyDe name myName department myDe publicvoidgiveLesson System out println 知识点讲解 System out println 总结提问 publicvoidintroduction System out println 大家好 我是 department 的 name 继承 使用继承 publicclassJavaTeacherextendsTeacher publicAccpJavaTeacher2 StringmyName StringmyDe super myName myDe publicvoidgiveLesson System out println 启动Eclipse super giveLesson publicclassCTeacherextendsTeacher publicCTeacher StringmyName StringmyDe super myName myDe publicvoidgiveLesson System out println 启动Visualc 6 0 super giveLesson 子类自动继承父类的属性和方法 子类中不再存在重复代码 继承 请编码实现动物世界的继承关系 动物 Animal 具有行为 吃 eat 睡觉 sleep 动物包括 兔子 Rabbit 老虎 Tiger 这些动物吃的行为各不相同 兔子吃草 老虎吃肉 但睡觉的行为是一致的 请通过继承实现以上需求 并编写测试类AnimalTest进行测试 抽象类与接口 抽象类 用关键字abstract修饰的类称为abstract类 抽象类 如 abstractclassA 用关键字abstract修饰的方法称为abstract方法 抽象方法 例如 abstractintmin intx inty 抽象类 抽象类是它的所有子类的公共属性的集合 使用抽象类的一大优点就是可以充分利用这些公共属性来提高开发和维护程序的效率 对于抽象类与抽象方法的限制如下 凡是用abstract修饰符修饰的类被称为抽象类 凡是用abstract修饰符修饰的成员方法被称为抽象方法 抽象类中可以有零个或多个抽象方法 也可以包含非抽象的方法 抽象类中可以没有抽象方法 但是 有抽象方法的类必须是抽象类 抽象类 抽象类对于抽象类与抽象方法的限制 续 对于抽象方法来说 在抽象类中只指定其方法名及其类型 而不书写其实现代码 抽象类可以派生子类 在抽象类派生的子类中必须实现抽象类中定义的所有抽象方法 抽象类不能创建对象 创建对象的工作由抽象类派生的子类来实现 如果父类中已有同名的abstract方法 则子类中就不能再有同名的抽象方法 abstract不能与final并列修饰同一个类 abstract不能与private 私有 static 先加载 final 最终 并列修饰同一个方法 抽象类 利用抽象类改写面积程序定义抽象类 抽象类 定义矩形 圆形子类 抽象类 抽象类abstract类只关心操作 但不关心这些操作具体实现的细节 可以使程序的设计者把主要精力放在程序的设计上 而不必拘泥于细节的实现上 多态的主要方法之一是使用上溯对象实现动态多态 即将abstract类声明对象作为其子类的上溯 那么这个上溯对象就可以调用子类重写的方法 接口 接口为了克服Java单继承的缺点 Java使用了接口 一个类可以实现多个接口 使用关键字interface来定义一个接口 接口的定义和类的定义很相似 分为接口的声明和接口体 格式 修饰符 interface接口名 常量数据成员抽象方法 接口 接口接口定义用关键字interface 而不是用class 接口中定义的数据成员隐含为public static和final 即常量 接口中没有自身的构造方法 所有成员方法都是隐含为public和abstract抽象方法 接口也具有继承性 可以通过extends关键字声明该接口的父接口 接口 接口示例 接口 接口在类中 用implements关键字就可以调用接口 如果实现某接口的类不是abstract的抽象类 则在类的定义部分必须实现指定接口的所有抽象方法 接口的抽象方法的访问限制符都己指定为public 所以类在实现方法时 必须显式地使用public修饰符 如果实现某接口的类是abstract的抽象类 则它可以不实现该接口所有的方法 接口 接口接口的思想在于它可以增加很多类都需要具有的功能 而且实现相同的接口类不一定有继承关系 不同类可以实现相同的接口 同一个类也可以实现多个接口接口只关心操作 并不关心操作的具体实现与抽象类的上溯相类似 可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中 称为接口回调 接口 接口多重继承接口回调 说明java目

温馨提示

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

评论

0/150

提交评论