java多態和強制類型轉換

子類能夠賦值給超類,稱之爲向上轉型,這個是自動的。java

 

超類不能夠賦值給子類,這個是向下轉型,須要咱們手動實現。函數

 

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

 

小類型    可轉換爲   大類型  code

大類型   轉小類型須要   強制轉換對象

 

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

子類轉換爲父類屬於向上塑型,能夠直接轉換編譯

父類轉換爲子類屬於向下塑型,須要強制類型轉換,可是不必定成功。成功的條件是這個父類是通過子類向上塑型轉換來的class

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

對於不存在繼承關係的強制類型轉換,通常都是失敗的(若是不寫轉換方法的話)引用

 

即:

 子類可轉爲父類,父類不能夠轉爲子類(若是不用強制類型轉換)

 

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

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

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

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

 

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

 

或者說:

 

對象多態時:

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