天天看點

《Java程式設計思想》之多态(面向對象程式語言的第三基本特征)

1.在面向對象的程式設計語言中,多态是繼承資料抽象和繼承之後的第三基本特征。

2.“封裝”通過合并特征和行為來建立新的資料類型。

3.“實作隐藏”則通過将細節“私有化”,把接口和實作分離開來。

4.多态的作用則是消除類型之間的耦合關系。

5.耦合就是指兩個或兩個以上的實體互相依賴于對方的一個量度。

6.多态也稱作動态綁定、後期綁定或運作時綁定。

7.将一個方法調用同一個方法主體關聯起來被稱作“綁定”。

8.“前期綁定”:程式執行前進行的綁定,由編譯器和連接配接程式實作。面向對象的語言不需要選擇就預設的綁定方式。

9.Java中除了static方法和final方法(private方法屬于final方法)之外,其它所有方法都是後期綁定。

10.為什麼要将某個方法聲明為final呢?

(1)它可以防止其它人覆寫該方法。

(2)也是更為重要的一點。這樣做可以有效地“關閉”動态綁定,或者說,告訴編譯器不需要對其進行動态綁定。這樣,編譯器就可以為final方法調用生成更有效的代碼。然而,大多數情況下,這樣做對程式的整體性能不會有什麼改觀。是以,最好根據設計來決定是否使用final,而不是出于試圖提高性能的目的來使用final。

11.多态的一個簡單的例子:

運作結果:

由于多态(後期綁定),還是正确調用了Circle draw()和Square draw()。

12.Java中的“抽象方法”相當C++語言中的純虛函數。

13.構造函數并不具有多态行(它們實際上是static方法,隻不過該static聲明是隐式的)。

14.在構造函數内部調用一個動态綁定的方法,那麼被調用的方法所操縱的成員可能還未初始化(可能造成一些難以發現的隐含的錯誤)。如下例子:

15.複雜對象的初始化過程:

1)在其他任何事物發生之前,将配置設定給對象的存儲空間初始化成二進制的零。

2)調用基類構造函數,一個反複遞歸,直至最低層的基類。

3)按照聲明的順序調用成員的初始化方法。

4)調用導出類的構造函數

16.如果不是後期綁定,就不是多态。如方法重載,它是屬于非面向對象的特性。

繼續閱讀