## 定义类型
应该将通用的方法放在基类当中.而具有特殊作用的方法放在子类当中.
## 覆盖方法
可以对父类的同名方法进行重写.
## 子类构造器
调用父类构造器必须写在子类构造器的第一行,如果没有显示的调用父类构造器,子类将自动的掉用哪个一个无参数的父类构造器.如果父类没有不带参数的构造器,而子类又没有显示的调用父类构造器,那么java编译器将会报错.
~~~
Manager boss = new Manager("jack");
Employee[] staff = new Employee[2];
staff[0] = boss;
staff[1] = new Employee("milan");
for (Employee e : staff) {
System.out.println(e.getName());
}
~~~
Manager 类继承自Employee, 调用能够确定应该执行哪个 getSalary 方法。 请注意, 尽管这里将 e 声明为 Employee 类型, 但实际上 e 既可以引用 Employee 类型的对象, 也可以引用 Manager 类型的对象。
当 e 引用 Employee 对象时, e.getSalary( ) 调用的是 Employee 类中的 getSalary 方法; 当 e 引用 Manager 对象时, e.getSalary( ) 调用的是 Manager 类中的 getSalary 方法。 虚拟机知道 e 实际引用的对象类型, 因此能够正确地调用相应的方法。
一个对象变量(例如, 变量 e) 可以指示多种实际类型的现象被称为多态(polymorphism)。 在运行时能够自动地选择调用哪个方法的现象称为动态绑定(dynamic binding。)
## 继承层次
一个基类可以无限的被子类继承,形成一个继承链.java只支持单继承.
## 多态
有一个用来判断是否应该设计为继承关系的简单规则,这就是"is-a" 规则,它表明子类的每个对象也是超类的对象.例如,每个经理都是雇员,因此,将Manager类设计为Employee类的子类是显而易见的,反之不然,并不是每一名雇员都是经理.
"is-a"规则的另一种表述法是置换法则.它表明程序中出现超类对象的任何地方都可以用子类对象置换.
## 受保护访问
在实际使用中,避免滥用protected.尽量不要对域设置protected,而是对方法设置protected.