面向对象编程08继承和多态.ppt_第1页
面向对象编程08继承和多态.ppt_第2页
面向对象编程08继承和多态.ppt_第3页
面向对象编程08继承和多态.ppt_第4页
面向对象编程08继承和多态.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

第四章 面向对象编程 本章主要内容 4.1 简介 4.2 面向对象的基本概念 4.3 面向对象的基本语法 4.4 类和包 4.5 类的方法 4.6 对象 4.7 继承和多态 4.8 接口和抽象类 4.9 面向对象开发概念 定义类的方法的步骤是什么? 类中的一个方法如何调用类的另一个方法? 类中的一个方法如何调用另一个类的方法? 分别说明成员变量和局部变量的作用域。 如何给类的方法添加JavaDoc注释? 课程回顾 本章目标 掌握继承 掌握super关键字 掌握多态 4.6 继承和多态 计算机语言设计犹如在 公园里漫步。我是说侏 罗纪公园 。 Larry Wall (Perl 语言之父) 生活中的继承 生活中,继承的例子随处可见 动物 食草动物食肉动物 谁是父类? 谁是子类? 能说出继承的特点吗? 继承需要符合的关系:is-a,父类更通用、子类更具体 生活中的继承 子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性 巴士是汽车吗? 卡车是汽车吗? 出租车是汽车吗? 最大载客数量 报站 引擎数量 外观颜色 刹车 加速 汽车 最大载重量 卸货 所属公司 最大载客数量 打发票 属性 行为 请问:出租车包 含哪些属性和行 为呢? 4.6.1 类和类的继承 类的设计其实是对现有世界的模仿 在继承中,一般常见的有属性继承,属性隐藏,方法继承,方法覆盖,方法重 载等技术。 在Java语言中,用extends关键字来表示一个类继承了另一个类 在父类中只定义一些通用的属性与方法 子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法 子类的构造方法中,通过super关键字调用父类的构造方法 方法重写后,通过super关键字调用父类的方法 在Java 中,所有的Java类都直接或间接地继承了java.lang.Object类 如何实现继承 3-1 在Java语言中,用extends关键字来表示一个类继承了另一个类,例如: public class Woman extends Human /其余代码省略 在父类中只定义一些通用的属性与方法,例如: public class Human private String name; private String school; public Human(String name, String sex, int age) /初始化属性值 public void canEat() public void breath() 如何实现继承 3-2 子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法 public class Human private String name; / 教员姓名 private String sex;/ 所在中心 public Human (String myName, String mySex) /初始化属性值 public void sayHello() /方法的具体实现 public class Father extends Human public Father(String myName, String mySex) super(myName, mySex); public void sayHello() System.out.println(“你好,我是爸爸“); super.sayHello(); 由于sayHello()方法与父类的实 现有所不同,因此重写了该方 法 方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型 父类中的属性和方法可以被 子类继承 public class Father extends Human public Father(String myName, String mySex) super(myName, mySex); 如何实现继承 3-3 子类的构造方法中,通过super关键字调用父类的构造方法 方法重写后,通过super关键字调用父类的方法 public class Father extends Human public void sayHello() System.out.println(“你好,我是爸爸“); super.sayHello(); 通过调用父类的构造方法,完成 对属性值的初始化 一切类的“祖先”Object 在Java 中,所有的Java类都直接或间接地继承了java.lang.Object类 public class MyObject / public class MyObect extends Object / 在Eclipse中调用MyObject对象 的成员,会自动弹出继承自 Object的所有方法 4.6.1 类和类的继承 函数的覆盖和重载的区别 4.6.1 类和类的继承 重载的情况下,子类的访问权限比父类要大。 参看课本例4.15 Man类: 用于测试Man类的程序: 为什么需要多态 5-1 在Woman/Man类的基础上,开发一个类用来判 断,负责对Woman、Man中的方法进行判断: 1、打招呼 为什么需要多态 5-2 第一种解决方案 public class Judge public void judge(Man man) man.sayHello(); man.isFather(); public void judge(Woman woman) woman.sayHello(); woman.isMother(); public static void main(String args) Man lisi = new Man(“李四“,“男“); Woman lili = new Woman(“李丽“,“女“); Judge judge = new Judge(); judge.judge(lisi); judge.judge(lili); 我继承于Human类,是个男性 大家好,我是李四,是个男人 我继承于Human类,是个女性 大家好,我是李丽,是个女人 控制台输出 为什么需要多态 5-3 现在,升级人类,增加一种新类型:Boy 同时,Judge也负责对这类进行评估 为什么需要多态 5-4 如果在第一种解决方案的基础上去解决,我们需要如下两个步骤 : 建立Boy类 修改Judge类,增加方法:judge(Boy boy) 每增加一种新的人类型,都要修Judge类,增加相应的judge(评估) 方法,代码的可扩展性及可维护性极差 能找到这个解决方案的弊端吗? 为什么需要多态 5-5 第二种解决方案使用多态 public class JudgeAll public void judge(Human human) human.sayHello(); public static void main(String args) JudgeAll judgeall = new JudgeAll(); judgeall.judge(lisi); judgeall.judge(lili); judgeall.judge(xiaoming); 可以接收子类类型 根据实际创建的对象类型 调用相应方法 我继承于Human类,是个男性 大家好,我是李四,是个男人 我继承于Human类,是个女性 大家好,我是李丽,是个女人 我继承于Human类,是个男孩 ,还没有成年 控制台输出 使用多态之后,当需要增加新的子类类型时,无需更改Judge类,程序的 可扩展性及可维护性增强 什么是多态 简单来说,多态是具有表现多种形态的能力的特征 同一个实现接口,使用不同的实例而执行不同操作 彩色打印机 打印机 黑白打印机 打印效果:彩色打印效果:黑白 打印 打印 public class Human public void sayHello() System.out.println(“大家好,我是“ + name + “, 是个“ + sex + “人“); public class Test public static void main(String args) JudgeAll judgeall = new JudgeAll(); judgeAll.judge(new Boy(); 3 如何实现多态 1、子类重写父类的方法 2、编写方法时,使用父类定义的方法 3、运行时,根据实际创建的对象类型动态决定使用哪个方法 public class Boy extends Human public void sayHello() System.out.println(“我继承于Human类,是个男孩, 还没有成年“); 1 public class JudgeAll public void judge(Human human) human.sayHello(); 2 总结 2-1 给定如下Java代码,编译运行后,输出结果是什么? 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“; public class Sample public static void main(String args) Child c = new Child(); c.method(); Child2 控制台输出 1 2 3 总结 2-2 给定如下Java代码,编译运行后,输出结果是什么? public class Human public void sayHello() System.out.println(“你好,我是人类“); public class Boy extends Human public void sayHello() System.out.println(“你好,我是男孩“); 1 2 public class Test public static void main(String args) Human t = new Boy (); t.sayHello(); 控制台输出 你好,我是男孩 4.6.2 类的运行时多态 当不同的对象接受到相同的消息名(或者说当不同的对象调用相同 的名称的成员函数)

温馨提示

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

最新文档

评论

0/150

提交评论