java溫習*(12):多態關於向上(或向下)類型轉換的應用問題

1、向上轉型的有什麼用處?直接創建子類對象不是更方便?

向上轉型的語法:父類類型 父類引用 = new 子類類型(參數);

即:使用父類引用指向子類實例化對象,也稱爲自動轉型或隱式轉型。

此時,該引用只能訪問子類繼承或重寫父類的方法,而不能直接訪問子類特有的方法。向上轉型多適用於,有多個同父子類共同應用的場景,此時,可以藉由父類引用,根據實際需要,轉型爲特定的子類對象實現多態。

譬如:父類Person,有3個子類Chinese、French、Russian,類中分別重寫了eat方法

圖片描述

圖片描述

此時,在測試類中,如果需設置方法實現對各子類eat方法的調用。

方案1:創建eatTest方法,設置參數爲父類類型,利用向上轉型,在main方法中調用時,分別直接傳入子類即可。

圖片描述

運行結果:

圖片描述

方案2:分別設置3個eatTest的重載方法,分別設置參數爲:Chinese、French、Russian,main方法不變,運行結果也與方案1相同。

圖片描述

由此可清晰看出,採用向上轉型設置的方案更加簡單靈活。如後續再新增加新的子類,也無需新增eatTest方法,非常方便。

2、爲什麼需要向下轉型,直接實例化子類不是更簡單?

向下轉型一般是爲了重新獲得因爲向上轉型而丟失的子類特性而存在,因此,通常在向下轉型前需要先進行向上轉型,向下轉型通常也會結合instanceof一起應用。

譬如:修改上一問題中的3個子類Chinese、French、Russian,類中分別新增各自獨有的方法。

圖片描述

圖片描述

此時如需在測試類eatTest方法中,修改eatTest ,實現針對傳入不同的參數分別調用各自獨立方法,則可以參考如下代碼

圖片描述

由此可見,藉由向下轉型,可以在靈活應用多態的基礎上,同時兼顧子類的獨有性,相較於直接創建子類實例,提高了代碼加靈活性。

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