Java學習總結第十五天Java多態性

多態

Java 引用變量有兩個類型:一個是編譯時的類型,一個是運行時的類型,編譯時的類型由聲明該變量時使用的類型決定,運行時的類型由實際賦給該變量的對象決定。

如果編譯時類型和支行時的類型不一致,這就有可能出現所謂的多態。

兩個相同類型的引用變量,由於它們實際引用的對象的類型不同,當它們調用同名方式時,可能呈現出多種行爲特徵,這就是多態。

 

 

 

上面程序的main()方法中顯式創建了三個引用變量,對於前兩個引用變量bc和sc,它們編譯時類型和運行時類型完全相同,因此調用它們的成員變量和方法非常正常,完全沒有任何問題。但第三個引用變量ploymophicBc則比較特殊,它的編譯時類型是BaseClass,而運行時類型是SubClass,當調用該引用變量的test()方法(BassClass類中定義了該方法,子類SubClass覆蓋了父類的該方法)時,實際執行的是SubClass類中覆蓋後的test()方法,這就可能出現多態了。

當把一個子類對象直接賦給父類引用變量時,當運行時調用該引用變量的方法時,其方法行爲總是表現出子類方法的行爲特徵,而不是父類的行爲特徵,這就可能出現:相同類型的變量、調用同一個方法時呈現出多種不同的行爲特徵,這就是多態。

 

引用變量的強制類型轉換

將一個子類對像賦給父類,這就是向上轉型。向上轉型是自動的。

強制類型轉換: 類型轉換運算符是小括號,語法如下(type)variable;

這個類型轉換運算符還可以將一個引用類型變量轉換成其子類類型。這種強制類型轉換不是萬能的,當進行強制類型轉換時需要注意:

Ø 基本類型之間的轉換隻能在數值類型之間進行,這裏所說的數值類型包括整數型、字符型和浮點型。但數值類型和布爾類型之間不能進行類型轉換。

Ø 引用類型之間的轉換隻能在具有繼承關係的兩個類型之間進行,如果是兩個沒有任何繼承關係的類型,則無法進行類型轉換,否則編;譯時就會出現錯誤。

下面是進行強制類型轉換的實例程序:

 

考慮到進行強制類型轉換時可能出現異常,因此進行強制類型轉換之前應先通過instanceof運算符來判斷是否可以成功轉換。

instanceof運算符

前一個操作通常是一個引用類型的變量,後一個操作通常是一個類(也可以是接口)。如果是返回true 否返回false。

在使用instanceof運算符是需要注意:instanceof運算符前面操作數的編譯時類型要麼與後面的類型相同,要麼與後面的類具有父子繼承關係,否則會引起編譯錯誤。下面程序示範了instanceof運算符的用法:

 

 

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