Thinking in Java Study(07)

多態

面向對象的程序設計語言的特徵,抽象、繼承、多態。

多態分離“做什麼”和“怎麼做”,將接口與實現分離。作用:不但能夠改善代碼的組織結構和可讀性,還能夠創建“可擴展的”程序。(動態邦定,後期邦定,運行時邦定)

1.  向上轉型

前面的章節已經介紹,繼承自基類的子類可以自動轉化爲基類的對象,可以接受所有發送給基類的消息。

2.  忘記對象類型

在編寫方法時可以完全忘記對象的類型,而採用基類的類型作爲參數。其會自動的認出傳入的是什麼類型的對象,從而調用相應的方法。

3.  方法調用綁定

方法綁定就是將一個方法調用和一個方法主體關聯起來。

若在程序執行前進行邦定叫做前期綁定,C語言的編譯器採用這種方法

在運行時根據對象的類型進行綁定叫做後期綁定,Java除了staticfinal方法外其他方法都是後期綁定。

4.  產生正確的行爲

Shape的例子,編譯器能做出正確的判斷知道應該調用那個類型的方法。

5.  Private方法的重載

只有非private方法纔可以被重載,在導出中雖然可以寫一個和基類的private方法同名的方法,但其並不是基類方法的重載而是子類一個全新的方法。

6.  抽象類和抽象方法

使用abstract關鍵字修飾,包含抽象方法的類必爲抽象類,導出類必須實現抽象的方法。抽象類不能產生對象。

7.  構造器和多態

構造器的初始化順序,遞歸的調用基類的構造器,然後按聲明順序初始化導出類的成員,然後是導出類的構造器。

8.  繼承與清除

與初始化的順序剛好相反。清除時子類的dispose方法要顯式的調用基類的dispose方法,super.dispose()

9.  構造器內部的多態行爲

構造器初始化的順序,第一先將所有分配給對象的初始化空間置爲二進制的零。構造器中調用方法可能會訪問沒有完全初始化的對象。

“用儘可能簡單的方法是對象進入正常狀態;如果可以的話,避免調用其它方法”在構造器內部唯一能夠安全調用的方法是基類中的final方法。

10.              用繼承進行設計

當我們使用現成類來建立新類時,首先選擇“組合”,尤其是當你自己不能十分確定應該使用哪一種方式時。組合更加靈活,因爲它可以動態選擇類型,相反,繼承在編譯期間就需要知道確切的類型。

“用繼承表達行爲間的差異,用屬性表達狀態上的變化”繼承重載方法

11.              向下轉型

RTTI類型檢測,會自動檢測能否向下轉型,如果不能拋出ClassCastException異常

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章