java多型和強制型別轉換

2021-09-22 13:15:57 字數 1299 閱讀 4557

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

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

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

小型別    可轉換為   大型別  

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

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

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

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

即 :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 ...