当前位置:文档之家› 第8章动物类派生继承与多态

第8章动物类派生继承与多态


public class Example1 { public static void main(String[] args) { Human1 person = new Human1("林冲", ' 男', 30); person.think(); System.out.println(); Pupil1 aPupil = new Pupil1("001", "李 明", '男', 6); aPupil.think(); aPupil.learn(); } }
8.3 用protected声明受保护成员

关键字 protected 可修饰类的字段和方法,这些成员 能被所有派生子类直接或间接继承。 protected修饰的类成员,还能被类所在的包访问。


在例8-1中,使用了关键字protecБайду номын сангаасed修饰人类Human1 的name、sex和age字段。
虽然 protected 可以修饰字段,但类的封装性要求除 了final常量字段外,其它字段一律应为private。故 不可滥用protected修饰字段。

【例8-2】按照类封装性要求改写例8-1,以保证字段 为private。
class Human2 { private String name; private char sex; private int age; public Human2(String name, char sex, int age) { … } protected String getName(){ … } public void think(){ … } }

Student
8.4.2 用super访问父类字段和方法

除了调用父类构造方法外,super还可在子类中指代父 类对象,用于: 访问被子类隐藏的父类字段, 调用被子类覆盖的父类方法。

使用形式: super.父类字段名
super.父类方法名(可选实参表)
1、成员的隐藏

对于子类可以从父类继承的成员变量,只要子类 中声明的成员变量和父类中的成员变量同名时,子类 就隐藏了继承的成员变量;子类自己声明定义的方法 与父类方法同名是指子类重新声明定义的这个成员方 法。
【例8-3】编程,验证执行子类构造方法会自动调用父类的构造方法。 class Human3 { public Human3() { System.out.println("构造了一个人"); } }
class Pupil3 extends Human3 { public Pupil3(){ //super(); //相当于执行了 本语句 System.out.println("构造了一个学生"); } } public class Example3 { public static void main(String[] args) { Pupil3 pupil = new Pupil3(); } }
class Pupil1 extends Human1 {
//继承人类的学生类 protected String stuNo; //学号 public Pupil1(String stuNo, String name, char sex, int age) { super(name, sex, age); this.stuNo = stuNo; } public void learn( ){ } … } //学习方法
class Pupil2 extends Human2 { private String stuNo; public Pupil2(…){ … } public void learn( ){ …} } public class Example2 { public static void main(String[] args) { Human2 person = new Human2(" 林冲 ", ' 男 ', 30); person.think(); … Pupil2 aPupil = new Pupil2("001", "李明", ' 男', 6); aPupil.think(); aPupil.learn(); } }
8.4.1

8.4 关键字super 用super调用父类构造方法
类如果没有显式声明构造方法,则自动生成无参数的默 认构造方法。 子类不继承父类的构造方法,因此,子类如果想使 用父类的构造方法,必须在子类的构造方法中使用,并 且必须使用关键字 super 来表示,而且 super 必须是子类 构造方法中的头一条语句。
第8章动物类派生继承与多态
内容介绍

8.1 8.3 8.4 8.6 8.7 8.8
任务预览 用protected声明受保护成员 关键字super 多态性 本章小结 实训8:人类派生与动物类派生


8.2 继承与派生


8.5 类类型变量赋值
8.1 任务预览

本章实训程序运行结果:
8.2 继承与派生

计算机世界与自然界一样,类之间也有继承和派生关系。 运用继承与派生能达到代码重用、简化编程的目的。语 法:
class 子类名 extends 父类
[public] [abstract] [final] { ... }

类的单一继承关系形成了清晰的层次结构,树状图如下:
【例8-1】编写人类。再编写继承人类的学生类,学生 类还拥有学号字段和学习方法。构造人类和学生类的对 象,输出有关信息。 class Human1 { //人类 protected String name; protected char sex; protected int age; public Human1(String name, char sex, int age) { = name; this.sex = sex; this.age = age; } public void think(){ //思考 方法 System.out.println(name + "在思考..."); } }
相关主题