第五章 继承
5.继承
5.1 类、超类和子类
5.1.1 定义子类
public class Manager extends Employee
{
添加方法和域
}
已存在的类称为超类( superclass )、基类( base class ) 或父类( parent class) ;
新类称为子类( subclass)、 派生类( derived class ) 或孩子类(child class )。
“ is-a” (继承)规则的另一种表述法是置换法则。它表明程序中出现超类对象的任何地方都可以用子类对象置换。
5.1.2 覆盖方法
public double getSalaryO
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
super:指示编译器调用超类方法的特殊关键字。
子类中可以增加域、增加方法或覆盖超类的方法, 然而绝对不能删除继承的任何域和方法。
在覆盖一个方法的时候,子类方法不能低于超类方法的可见性。
5.1.3 子类构造器
public Manager(St ring name, double salary, int year, int month, int day)
{
super(name, salary, year , month, day) ;
bonus = 0;
}
-
使用super 调用构造器的语句必须是子类构造器的第一条语句。
-
如果子类的构造器没有显式地调用超类的构造器, 则将自动地调用超类默认(没有参数)的构造器。
-
如果超类没有不带参数的构造器, 并且在子类的构造器中又没有显式地调用超类的其他构造器,则Java 编译器将报告错误。
-
☆this和super用法总结(p150):
- this:一是引用隐式参数,二是调用该类其他的构造器
- super:一是调用超类的方法,二是调用超类的构造器
-
多态:一个对象变量可以指示多种实际类型的现象
-
**动态绑定:**在运行时能够自动地选择调用哪个方法的现象
5.1.4 继承层次
由一个公共超类派生出来的所有类的集合被称为继承层次。在继承层次中, 从某个特定的类到其祖先的路径被称为该类的继承链。
Java不支持多继承,多继承功能的实现用接口。
5.1.5 多态
对象变量是多态的。一个Employee 变量既可以引用一个Employee 类对象, 也可以引用一个Employee 类的任何一个子类的对象。
Manager boss = new Manager(. . .);
Employee[] staff = new Employee[3];
staff[0] = boss ;
boss.setBonus(5000); // OK
staff[0].setBonus(5000); // Error
警告:子类数组的引用可以转换成超类数组的引用,而不需要采用强制类型转换,会发生错误。