子類可以賦值給超類,稱之為向上轉型,這個是自動的。
超類不可以賦值給子類,這個是向下轉型,需要我們手動實現。
賦值給超類的子類引用在執行期間將表現出不同的特性,這就是多型。
小型別 可轉換為 大型別
大型別 轉小型別需要 強制轉換
對於存在繼承關係的強制型別轉換:
子類轉換為父類屬於向上塑型,可以直接轉換
父類轉換為子類屬於向下塑型,需要強制型別轉換,但是不一定成功。成功的條件是這個父類是經過子類向上塑型轉換來的
即 :father father=new son(); son son=(son)father;
對於不存在繼承關係的強制型別轉換,一般都是失敗的(如果不寫轉換方法的話)
即:子類可轉為父類,父類不可以轉為子類(如果不用強制型別轉換)
1. 子類和父類含有相同的成員變數的時候,訪問的是父類的成員變數
2. 子類和父類含有相同的成員方法是,訪問的是子類的成員方法
3. 子類和父類含有相同的靜態函式和靜態方法時,訪問的是父類的。
4. 父類不能訪問子類特有成員和方法(強制型別轉換除外)
也就是說,只有在訪問成員方法的時候,才會表現出多型。
或者說:
物件多型時:
1.成員變數:(不涉及覆蓋)
編譯時: 參考引用變數所屬的類中是否有呼叫的成員變數, 有, 編譯通過,沒有,編譯失敗。
執行時: 參考引用變數所屬的類中是否有呼叫的成員變數, 並執行該類所屬中的成員變數。
2.成員函式(非靜態):
編譯時:參考引用變數所屬的類中是否有呼叫的成員變數, 有, 編譯通過, 沒有,編譯失敗:
執行時:參考的是物件所屬的類中是否有呼叫的函式。
簡單的說:編譯看左邊, 執行看右邊。
3.靜態函式, 變數:
編譯和執行都是參考左邊引數型別!
其實靜態方法不存在多型, 靜態方法是屬於類的,我們說的是物件的多型!靜態方法直接用類名呼叫就好了,
沒必要建立物件!
靜態的方法只能被靜態的方法所覆蓋!
java 型別轉換 強制型別轉換
今天在寫乙個demo時,碰到型別轉換問題。發現兩個不相干的class進行強制型別轉換編譯是不會通過的,但是。乙個class到乙個不相干的inte ce強制型別轉換是可以編譯通過的。可能有人感覺知道這沒什麼意義,但是感覺還是記錄下。雖然有自動型別轉換,以及強制型別轉換,但有時強制型別轉換不能通過時,可...
Java強制型別轉換
型別轉化 將乙個型別強制轉換成另外乙個型別的過程。數值型別之間的合法型別轉換 乙個表示式中要是有不同型別的數值,先要將運算元轉換為同一種型別,然後再進行計算。數值型別之間的強制型別轉換 語法格式 在圓括號中給出想要轉換的目標型別,後面緊跟待轉換的變數名。public static void main...
Java資料型別轉換(自動轉換和強制轉換)
自動轉換按從低到高的順序轉換。不同型別資料間的優先關係如下 低 高 byte,short,char int long float double 運算中,不同型別的資料先轉化為同一型別,然後進行運算,轉換規則如下 運算元1型別 運算元2型別 轉換後的型別 byte short char intint ...