- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
兄弟类对象不能相互替换 如果鸟类、马类和鱼类都继承动物类,则它们是同一层次的,是兄弟(姐妹)类。 显然,鸟不是马,鸟也不是鱼,因此,不能把鸟对象赋给马类或鱼类声明的变量。 同一层次的兄弟类变量之间不能相互赋值,即兄弟类对象间不能相互替换。 多态性 类的多态性: 一是类本身——方法重载 二是作为父类专用于派生——方法重写 三是通过实现接口而充当接口的实例类型。 * * 调用的方法依赖于隐式参数的实际类型,并且在运行时实现动态绑定。 动态绑定 静态绑定:对象方法的执行过程 1)编译器查看对象的声明类型和方法名 2)编译器查看调用方法时提供的参数类型 3) 如果是private,static final或构造方法,编译器将可以准确地知道应该调用哪个方法。 本章小结 类的继承与派生是一对互逆关系。 类是单一继承的,最顶层是根类Object。 protected主要作用是声明能被所有派生子类继承的成员。 关键字super与超(父)类相关,可以调用超类构造方法,也可访问被子类隐藏的父类字段,或调用重写的父类方法。 把子类对象赋给父类声明的变量,就变成了上转型对象。 但子类变量不能引用父类对象,兄弟类对象也不能相互替换。 关于多态性,主要表现在方法重写和方法重载上。前者涉及到两个类,属于运行时多态,也叫动态多态性。而方法重载则是在一个类内部,属于编译时多态,也叫静态多态性。它们的共同点是方法名相同。 实训8:人类派生与动物类派生 (1)编程,编写人类Human,有私有的姓名、性别和年龄字段,定义获取各个私有字段的受保护方法,再定义公共的构造方法和思考方法。编写继承人类的学生类Pupil,有私有的学号字段以及获取该字段的受保护方法,还有公共的构造方法和学习方法。再编写继承学生类的大学生类Student,有公共的构造方法、自学方法和输出数据方法。最后设计一个入口主类,构造若干个大学生,把他们的数据和行为列举出来。 (2)定义一个图形父类,包含求面积的方法,扩展子类圆、矩形、三角形等类,分别求面积。 * * * 计算机学院 * 第八章——继承与多态 计算机学院 教学目标 理解类的继承,能编写类及其派生子类;√ 能在子类中重写父类的同名方法;√ 理解多态含义,理解上转型对象;能运用继承与多态编写人类派生学生类、图形类的派生类求面积等——任务 * * Contents 回顾类的定义 1 继承与派生 2 用protected声明受保护成员 3 关键字super 4 多态性 5 here * 回顾 类的定义格式 类的头部: [ ] class 类名 [extends 父类] 类体 成员变量 实例变量 类变量 成员方法 构造方法 其他方法 类的使用 构造对象 :对象=new 构造方法 * Contents 回顾类的定义 1 继承与派生 2 用protected声明受保护成员 3 关键字super 4 多态性 5 here * 2、继承与派生 目的: 继承与派生能达到代码重用、简化编程的目的 [public] [abstract] | [final] class 子类名 extends 父类 语法: { ... } 子类: 派生类(有父类派生而来) 父类:超类 (派生类继承父类) * 3、 类继承的层次结构 1、单继承 2、Object 继承性——成员变量的继承性 子类继承父类的成员变量作为自己的一个成员变量* * 子类和父类在同一包中 子类和父类不在同一包中 父类中非private的成员变量 public protected 缺省 public protected 所谓子类继承父类的方法作为子类中的一个方法,就象它们是在子类中直接定义了一样,可以被子类中自己定义的任何实例方法调用 父类的protected、public方法为子类的方法 * * 继承性——成员方法的继承性 !注意继承的成员变量或方法的访问权限保持不变。 例1、 编写人类(包括姓名、性别、年龄)。再编写继承人类的 学生类除了上述字段外 ,学生类还拥有学号字段和学习方法。构造人类和学生类的对象,输出有关信息。 * * class Human1 {//人类 protected String name; protected char sex; protected int age; public Human1(String name, char sex, int age){ this.name = name; this.sex = sex; this.age = age; } public void think(){//思考方法 System.out.println(name + 在思考...);}}
文档评论(0)