概述
多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来。多态不但可以改善代码的组织结构和可读性,还可以创建可扩展的程序。
多态的作用是消除类型之间的耦合关系。
8.2.1 方法调用绑定
将一个方法调用同一个方法主体关联起来 被称作绑定。
若在程序执行前进行绑定(如果有的话,由编译器和连接程序实现) 叫做前期绑定。这是面向过程语言的默认绑定方式。C语言只有一种方法调用,那就是前期绑定。
后期绑定:在运行时根据对象的类型进行绑定。后期绑定也叫做动态绑定或运行时绑定。
java中除了static方法和final方法(private方法属于final方法)之外,其他所有的方法都是后期绑定。
8.2.2 产生正确的行为
java中所有的方法都是通过动态绑定来实现多态的。
只有非private方法才可以被覆盖,如果你覆盖了private修饰的方法,编译器虽然不会报错,但是却不会按照你的想法(多态)来执行。
8.2.5 缺陷:域与静态方法
只有普通的方法调用是多态的。
8.3 构造器和多态
构造器不具备多态性,构造器实际上是static方法,只不过是隐式声明的而已。
父类的构造器总是在子类的构造过程中被调用,而且按照继承层次逐渐向上链接,以使每个父类的构造器都能得到调用。
对象调用构造器要遵循下面的顺序:
- 调用基类(父类)构造器。这个步骤会不断地反复递归下去,首先是构造这种层次结构的根,然后是下一层子类,直到最低层的子类。
- 按声明顺序调用成员的初始化方法。
- 调用子类构造器的主体。