Cat cat=(Cat)animal;//編譯時(shí)是按Cat類型,為什么運(yùn)行時(shí)是按Dog類型?
是不是因?yàn)樵谒嫌?Dog dog2=(Dog)animal;這一句,已經(jīng)把a(bǔ)nimal轉(zhuǎn)成了Dog類型,所以運(yùn)行時(shí)是按照Dog類型?
是不是因?yàn)樵谒嫌?Dog dog2=(Dog)animal;這一句,已經(jīng)把a(bǔ)nimal轉(zhuǎn)成了Dog類型,所以運(yùn)行時(shí)是按照Dog類型?
2015-03-02
舉報(bào)
2015-03-07
有解答么。。。
2015-03-03
在繼承中,子類向父類轉(zhuǎn)換稱為“向上轉(zhuǎn)型”,將父類向子類轉(zhuǎn)換稱為“向下轉(zhuǎn)型”。
很多時(shí)候,我們會(huì)將變量定義為父類的類型,卻引用子類的對(duì)象,這個(gè)過程就是向上轉(zhuǎn)型。程序運(yùn)行時(shí)通過動(dòng)態(tài)綁定來實(shí)現(xiàn)對(duì)子類方法的調(diào)用,也就是多態(tài)性。
然而有些時(shí)候?yàn)榱送瓿赡承└割悰]有的功能,我們需要將向上轉(zhuǎn)型后的子類對(duì)象再轉(zhuǎn)成子類,調(diào)用子類的方法,這就是向下轉(zhuǎn)型。
注意:不能直接將父類的對(duì)象強(qiáng)制轉(zhuǎn)換為子類類型,只能將向上轉(zhuǎn)型后的子類對(duì)象再次轉(zhuǎn)換為子類類型。也就是說,子類對(duì)象必須向上轉(zhuǎn)型后,才能再向下轉(zhuǎn)型。
因?yàn)橄蛳罗D(zhuǎn)型存在風(fēng)險(xiǎn),所以在接收到父類的一個(gè)引用時(shí),請(qǐng)務(wù)必使用 instanceof 運(yùn)算符來判斷該對(duì)象是否是你所要的。
這里你已經(jīng)強(qiáng)制轉(zhuǎn)換了,可以能存在風(fēng)險(xiǎn),但是編譯可以通過,運(yùn)行時(shí)可能會(huì)出現(xiàn)問題,建議使用instanceof判斷。