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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java中引用類型的強制轉換

java中引用類型的強制轉換

qq_陽光下的海風_0 2016-09-08 19:45:41
public?class?TestPerson?{ public?static?void?main(String[]?args)?{ //?向上類型轉換,正常運行 Animal?a?=?new?Cat(); a.show(); //?向下類型轉換,正常運行 Animal?cat?=?new?Cat(); Cat?cat2?=?(Cat)?cat; cat2.show(); //?運行時異常 Cat?cat3?=?(Cat)?new?Animal(); cat3.show(); //?正常運行 Cat?cat4?=?(Cat)?getAnimal(a); cat4.show(); //?運行異常 Cat?cat5?=?(Cat)?getAnimal(); cat4.show(); } public?static?Animal?getAnimal(Animal?a)?{ return?a; } public?static?Animal?getAnimal()?{ return?new?Animal(); } } class?Animal?{ public?void?show()?{ System.out.println("Animal"); } } class?Cat?extends?Animal?{ public?void?show()?{ System.out.println("Cat"); } }我的疑惑是:明明都是強制轉換,為什么有的會報異常,有的卻可以正常進行?主要是異常的部分。注:我能理解向上類型轉換以及向下類型轉換正常運行的代碼,只是不理解那些異常的代碼。請大神講解,感激不盡
查看完整描述

5 回答

已采納
?
dky

TA貢獻93條經驗 獲得超26個贊

強制類型轉換的前提是, ? 對象本身的類型就是你要轉換的類型,但是在java中,繼承和多態的特性讓我們在定義函數的參數和返回值的時候往往是定義其父類,比如說,什么膚色的人都能坐飛機,你在飛機上隨機挑選一個乘客,你說這個乘客是黑人,這個命題事件成立的前提是這個人本身就是黑人,

查看完整回答
反對 回復 2016-09-08
  • qq_陽光下的海風_0
    qq_陽光下的海風_0
    主要是和Android中的findViewByid()混了,這個函數返回值就是View,就直接強轉了,、、、、這個函數底層應該做了相應的處理的。
  • dky
    dky
    是這樣的,哥們, findview的時候, 其實你是實現在xml文件中寫好了這個控件的類型,只不過,所有控件的都是拓展字view,和我說的一個意思 , findviewbyid函數就是通過id去找控件,找到的控件是什么,函數不知道 ,但是使用者在xml文件中寫了什么,使用者自己知道 , 就有了對應的強轉 。和我之前說的一個意思 。
  • qq_陽光下的海風_0
    qq_陽光下的海風_0
    嗯嗯,理解差不多了,謝啦
?
qq_碎流_0

TA貢獻3條經驗 獲得超1個贊

強制類型轉換的前提: 你明確知道這個類就是你要的那個類型,只不過被父類替代了.而如果你沒有明確這個類是子類,你還要去強制類型轉換,這個是不行的.

查看完整回答
1 反對 回復 2016-09-09
?
qq_碎流_0

TA貢獻3條經驗 獲得超1個贊

強制類型轉換的前提: 你明確知道這個類就是你要的那個類型,只不過被父類替代了.而如果你沒有明確這個類是子類,你還要去強制類型轉換,這個是不行的.

查看完整回答
反對 回復 2016-09-09
?
scala_somnus_gxy

TA貢獻23條經驗 獲得超5個贊

你的運行異常都是因為你直接用子類去創建父類的一個引用,按正常邏輯想想都不對啊,就像生孩子似的,父親可以生出好幾個孩子,你能倒過來說孩子生出好幾個父親?????

查看完整回答
反對 回復 2016-09-09
  • 5 回答
  • 0 關注
  • 1941 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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