Java_多态
对Thinking in java 多态一章的总结
8.1 再论向上转型
通过编写函数方法只与基类作为参数,从而消除了耦合。
8.2转机
Java使用后期绑定: 在运行时根据对象的类型进行绑定。也称为动态绑定,运行时绑定。
Java中除了static和final(private属于final)之外,所有其他的方法都是后期绑定。
final可以告诉编译器,我不需要被动态绑定,因此编译器会对其进行优化。然而我们应该处于设计原因,来使用final而非为了些许性能。final方法不可被重写,但会被继承可重载。
可扩充性:我们可以对子类方法进行修改,而不会影响程序。多态是一项让程序员”将改变的事物与未变的事物分离开来的技术”。
8.3构造器与多态
构造器是隐式的Static方法,并不具有多态性。
构造器的调用顺序
- 调用基类构造器。从根类不断向下递归调用。
- 按声明顺序调用成员的初始化方法
- 调用导出类构造器的主体
原因是因为:基类中可能有private成员变量,而子类无法访问基类私有成员变量。因此需要从基类逐步创建。
继承与清理
一般交由GC来处理,如果要自己处理的话,记住要清理基类。
8.4协变返回类型
导出类重写父类方法,方法的返回类型可以是父类返回类型的一个导出类。
8.5 用继承进行设计
优先使用组合,有更大的灵活性,可以动态改变类型。
纯继承与拓展:纯继承 is-a 关系; 拓展:is-like-a,扩展方法不能被基类引用调用。
向下转型与运行时类型识别:向上转型总是正确,向下转型要保证类型正确性,否则会抛出ClassCastException。这种在运行期间对类型进行检查的行为称作:RTTI运行时类型识别。