當前位置:
首頁 > 知識 > Java多態對象的 類型轉換

Java多態對象的 類型轉換

這裡所說的對象類型轉換,是指存在繼承關係的對象,不是任意類型的對象。當對不存在繼承關係的對象進行強制類型轉換時,java 運行時將拋出 java.lang.ClassCastException 異常。

在繼承鏈中,我們將子類向父類轉換稱為「向上轉型」,將父類向子類轉換稱為「向下轉型」。

很多時候,我們會將變數定義為父類的類型,卻引用子類的對象,這個過程就是向上轉型。程序運行時通過動態綁定來實現對子類方法的調用,也就是多態性。

然而有些時候為了完成某些父類沒有的功能,我們需要將向上轉型後的子類對象再轉成子類,調用子類的方法,這就是向下轉型。

注意:不能直接將父類的對象強制轉換為子類類型,只能將向上轉型後的子類對象再次轉換為子類類型。也就是說,子類對象必須向上轉型後,才能再向下轉型。請看下面的代碼:

public class Demo {

public static void main(String args[]) {

SuperClass superObj = new SuperClass();

SonClass sonObj = new SonClass();

// 下面的代碼運行時會拋出異常,不能將父類對象直接轉換為子類類型

// SonClass sonObj2 = (SonClass)superObj;

// 先向上轉型,再向下轉型

superObj = sonObj;

SonClass sonObj1 = (SonClass)superObj;

}

}

class SuperClass{ }

class SonClass extends SuperClass{ }

複製代碼

將第7行的注釋去掉,運行時會拋出異常,但是編譯可以通過。

因為向下轉型存在風險,所以在接收到父類的一個引用時,請務必使用 instanceof 運算符來判斷該對象是否是你所要的子類,請看下面的代碼:[size=0.9em]

public class Demo {

public static void main(String args[]) {

SuperClass superObj = new SuperClass();

SonClass sonObj = new SonClass();

// superObj 不是 SonClass 類的實例

if(superObj instanceof SonClass){

SonClass sonObj1 = (SonClass)superObj;

}else{

}

superObj = sonObj;

// superObj 是 SonClass 類的實例

if(superObj instanceof SonClass){

SonClass sonObj2 = (SonClass)superObj;

}else{

}

}

}

class SuperClass{ }

class SonClass extends SuperClass{ }

複製代碼

運行結果:

不能轉換

總結:對象的類型轉換在程序運行時檢查,向上轉型會自動進行,向下轉型的對象必須是當前引用類型的子類。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java學習吧 的精彩文章:

寫好Java代碼的 30條經驗總結
Java其實很簡單
學java還是學「ios」?「Android」?
Java初學者常問的問題:命令篇

TAG:java學習吧 |

您可能感興趣

Swift 類型轉換
能改變形狀的Aquanaut結合兩種類型水下機器人的特性
Facebook創建另類AI,可完美轉換音樂類型
opencv Mat類型和BYTE*指針類型互轉
Perl 數據類型
scala學習-泛型、界定、形變、this.type、複合類型、抽象類型
Staem模擬類型的遊戲,絕對的真人體驗
VirtualLink新標準讓下一代VR設備使用相同類型的電纜
Chrome 66 新特性:CSS 類型對象模型,非同步剪貼板 API,AudioWorklet,等
Google出品的Python代碼靜態類型分析器:Pytype
Redis 數據類型
Kotlin技術分享:類型的檢查與轉換
Nano Letters:中國科學家開發出DNA納米機器人 或能高效靶向殺滅特殊類型的乳腺癌細胞
戴森新的Pure Cool空氣凈化器多了顯示屏,能顯示污物類型和水平
Python數據類型、運算符、變數
Python動態類型簡介
類型轉換運算符 運算符重載 operator new operator delete
「Python」Chapter1 變數和簡單數據類型
Kotlin 基本數據類型
Hibernate 映射枚舉Enum 類型的屬性