java溫習*(11):向上轉型和動態綁定機制

多態的實現可以藉由向上轉型和動態綁定機制來完成,其中,向上轉型實現了將子類對象向上轉型爲父類類型;而動態綁定機制能識別出對象轉型前的類型,從而自動調用該類的方法,兩者相輔相成。在本節中,我們將從多角度總結,向上轉型與動態綁定機制的特點和注意事項。

語法:

  • 向上轉型

又稱爲自動轉型、隱式轉型。即是父類引用指向子類實例,也表示子類的對象可以賦值給父類的對象。向上轉型是安全的,因爲任何子類都繼承並接受了父類的非私有成員方法。

  • 綁定機制

綁定就是將一個方法調用同一個方法所在的類連接到一起。Java中存在靜態綁定和動態綁定兩種。

其中,靜態綁定是指在程序運行之前進行綁定(由編譯器和鏈接程序完成的),也叫做前期綁定。 動態綁定則是指在程序運行期間由 JVM 根據對象的類型自動的判斷應該調用哪個方法,也叫做後期綁定。

應用:

- 向上轉型

當一個子類對象向上轉型父類類型以後,就被當成了父類的對象,所能調用的方法會減少,只能調用子類重寫了父類的方法以及父類派生的方法,而不能調用子類獨有的方法。

譬如:圖(1)所示Pencil繼承自Pen,經過圖(2)完成向上轉型後,圖(3)的方法調用會報錯:The method show() is undefined for the type Pen,即無法調用不屬於Pen的show方法。

圖片描述

(圖1)

圖片描述

(圖2)

圖片描述

(圖3)

  • 綁定機制

靜態綁定的示例:

譬如:有一類 Human,它派生出來三個子類 Chinese 類、American 類和 British類,三個子類中都重寫了父類中的方法 speak( ):void。

如下圖所示,在測試類中用靜態綁定的方式調用方法 speak( )。這種調用方式是在代碼裏指定的,編譯時編譯器就知道 c 調用的是 Chinese 的 speak( ),a 調用的是 American 的 speak( )。

圖片描述

動態綁定的示例:

如果此時我們在測試類中做以下改動:Human 類中隨機生成 Chinese 類、American 類和 British 類的對象,則編譯器將不能根據代碼直接確定調用哪個類中的 speak( )方法,直到運行時才能根據產生的隨機數 n 的 值來確定 human[i]到底代表哪一個子類的對象,這樣才能最終確定調用的是哪個類中的 speak( )方法,這就是動態綁定。

圖片描述

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