一种类型与其他类型从同一个基类导出,多态方法调用使导出类表现出区别。
多态也称为动态绑定;
1、让Instrument的每种子类如Wind,Strings,Brass都能使用tune方法
不管导出类,让代码只与基类打交道更好
为每个数组元素draw时,与类型有关的特定行为会奇迹般发生。对draw的调用是动态绑定的。draw就是多态方法调用。
2、动态绑定:方法调用与方法主体关联起来称作绑定,java中都是后期绑定,运行时根据对象类型进行绑定。
用了final后,可防止他人覆盖该方法。可以关闭动态绑定。
tune是多态方法调用
当instrument接口中添加了其他方法,tune不需要改变
3、抽象类
Instrument类的目的是为其他导出类创建一个通用接口
包含抽象方法的类叫抽象类
继承抽象类,必须重写基类的抽象方法
abstract抽象类不要求所有方法都是抽象的。
interface则是更纯粹的抽象类,无方法体。
4、构造器与多态
构造器是隐式static,无多态性
5、构造器调用顺序
先调用基类构造器,再初始化成员变量,最后初始化导出类构造器
6、构造器类避免调用多态方法,可覆盖的基类抽象方法,只能调用基类中的final方法或private方法。
7、用继承表达行为间的差异,并用字段(组合)表达状态上的变化
通过继承得到两个不同的子类HappyActor和SadActor,用于表达act方法的差异。而Stage通过运用组合使自己的状态发生变化。
8、向上转型安全,但会丢失导出类中的扩展接口。向下转型不安全