java多態和強制類型轉換


子類可以賦值給超類,稱之為向上轉型,這個是自動的。

 

超類不可以賦值給子類,這個是向下轉型,需要我們手動實現。

 

賦值給超類的子類引用在運行期間將表現出不同的特性,這就是多態。

 

小類型    可轉換為   大類型  

大類型   轉小類型需要   強制轉換

 

對於存在繼承關系的強制類型轉換:

子類轉換為父類屬於向上塑型,可以直接轉換

父類轉換為子類屬於向下塑型,需要強制類型轉換,但是不一定成功。成功的條件是這個父類是經過子類向上塑型轉換來的

即 :Father father=new Son(); Son son=(Son)father;

對於不存在繼承關系的強制類型轉換,一般都是失敗的(如果不寫轉換方法的話)

 

即:

 子類可轉為父類,父類不可以轉為子類(如果不用強制類型轉換)

 

1.  子類和父類含有相同的成員變量的時候,訪問的是父類的成員變量

2.  子類和父類含有相同的成員方法是,訪問的是子類的成員方法

3.  子類和父類含有相同的靜態函數和靜態方法時,訪問的是父類的。

4.  父類不能訪問子類特有成員和方法(強制類型轉換除外)

 

也就是說,只有在訪問成員方法的時候,才會表現出多態。

 

或者說:

 

對象多態時:

1.成員變量:(不涉及覆蓋)
編譯時: 參考引用變量所屬的類中是否有調用的成員變量, 有, 編譯通過,沒有,編譯失敗。
運行時: 參考引用變量所屬的類中是否有調用的成員變量, 並運行該類所屬中的成員變量。
簡單的說:編譯和運行都參考等號的左邊。
2.成員函數(非靜態):
編譯時:參考引用變量所屬的類中是否有調用的成員變量, 有, 編譯通過, 沒有,編譯失敗:
運行時:參考的是對象所屬的類中是否有調用的函數。
簡單的說:編譯看左邊, 運行看右邊。
3.靜態函數, 變量:
    編譯和運行都是參考左邊參數類型!
    其實靜態方法不存在多態, 靜態方法是屬於類的,我們說的是對象的多態!靜態方法直接用類名調用就好了,
    沒必要創建對象!
    靜態的方法只能被靜態的方法所覆蓋!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM