5.1.1 定义子类
extends
5.1.2 覆盖方法
super
5.1.3 子类构造器
package chapter05;
import chapter04.Employee;
public class Manager extends Employee {
private double bonus;
public Manager(String n, double s, int year, int month, int day) {
// super() 必须是第一句
super(n, s, year, month, day);
bonus = 0;
}
public void SetBonus(double b) {
bonus = b;
}
public double GetSalary() {
return super.GetSalary() + bonus;
}
}
5.1.4 继承层次
5.1.5 多态
- is-a
- 替换原则
- 程序中出现超类对象的任何地方都可以使用子类对象替换
5.1.6 理解方法调用
- 可协变的返回类型
- 动态绑定
- 静态绑定
5.1.7 阻止继承: final 类和方法
final 类不能被继承:
- 该类的字段不是 final
- 该类的方法都是 final
package chapter05;
public final class Executive {
...
}
final 方法不能被覆盖:
package chapter05;
public class Executive {
private String name;
public final String getName() {
return name;
}
}
5.1.8 强制类型转换
将某个类的对象引用转换成另外一个类的对象引用.
Manager boss = (Manager) staff[0];
在转换之前使用 instanceof:
if (staff[1] instanceof Manager) {
boss = (Manager) staff[1];
...
}
5.1.9 抽象类
包含一个或多个抽象方法的类本身必须被声明为抽象:
package chapter05;
public abstract class Person {
private String name;
public abstract String getDescription();
}
class Student extends Person {
private String major;
public Student(String n, String m) {
super(n);
major = m;
}
public String getDescription() {
return "a student majoring in " + major;
}
}
5.1.10 受保护访问
子类不能访问父类的 private 字段.
- proteced 字段只能在同一包/子类中访问
访问控制总结: