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运行时类型识别。