一種類型與其他類型從同一個基類導出,多態方法調用使導出類表現出區別。
多態也稱爲動態綁定;
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、向上轉型安全,但會丟失導出類中的擴展接口。向下轉型不安全