亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Cat cat=(Cat)animal;//編譯時是按Cat類型,為什么運行時是按Dog類型?

是不是因為在他之上有?Dog dog2=(Dog)animal;這一句,已經把animal轉成了Dog類型,所以運行時是按照Dog類型?

正在回答

2 回答

有解答么。。。

0 回復 有任何疑惑可以回復我~

在繼承中,子類向父類轉換稱為“向上轉型”,將父類向子類轉換稱為“向下轉型”。
很多時候,我們會將變量定義為父類的類型,卻引用子類的對象,這個過程就是向上轉型。程序運行時通過動態綁定來實現對子類方法的調用,也就是多態性。
然而有些時候為了完成某些父類沒有的功能,我們需要將向上轉型后的子類對象再轉成子類,調用子類的方法,這就是向下轉型。
注意:不能直接將父類的對象強制轉換為子類類型,只能將向上轉型后的子類對象再次轉換為子類類型。也就是說,子類對象必須向上轉型后,才能再向下轉型。

因為向下轉型存在風險,所以在接收到父類的一個引用時,請務必使用 instanceof 運算符來判斷該對象是否是你所要的。

?Dog?dog2=(Dog)animal

這里你已經強制轉換了,可以能存在風險,但是編譯可以通過,運行時可能會出現問題,建議使用instanceof判斷。

3 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

Cat cat=(Cat)animal;//編譯時是按Cat類型,為什么運行時是按Dog類型?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號