示例一
父類強(qiáng)制轉(zhuǎn)子類
Father f = new Father(); Son s = (Father)f;//出錯(cuò) ClassCastException
分析:
創(chuàng)建一個(gè)父類的實(shí)例,想要強(qiáng)制把父類對(duì)象轉(zhuǎn)換成子類的,不行!通俗的想,真正當(dāng)?shù)挠肋h(yuǎn)不可能裝兒子。
在線學(xué)習(xí)視頻教程分享:java在線教程
示例二
“假的”父類強(qiáng)制轉(zhuǎn)子類
Father f = new Son(); Son s = (Son)f;//可以
分析:
父類對(duì)象引用著一個(gè)子類實(shí)例。
Son類特有的屬性暫時(shí)不能通過 f 來操作,因?yàn)镕ather類沒有Son類(子類)的特有屬性。
接著創(chuàng)建子類對(duì)象 s,它引用的是父類對(duì)象 f 強(qiáng)制轉(zhuǎn)換來的對(duì)象(其實(shí)就是個(gè)裝爹的Son,把他強(qiáng)制轉(zhuǎn)回了Son),這時(shí)就可以通過 s 來操作子類的特有屬性了。
通俗的說就是兒子裝爹,終究是兒子,本質(zhì)沒變,還是可以把他強(qiáng)制轉(zhuǎn)回兒子的。
示例三
子類強(qiáng)制轉(zhuǎn)父類
Son s = new Son(); Father f = (Father)s;//可以
分析:
子類轉(zhuǎn)換成父類,只是子類對(duì)象的特有屬性無法利用 f 操作,f 可以操作其非特有的屬性(由父類繼承而來的屬性)。
通俗的說,兒子和爹的共同點(diǎn)——“都是人”,兒子是人是從父親繼承而來的,他們都有人的基本行為,只是兒子永遠(yuǎn)不可能和父親平輩(子類類型轉(zhuǎn)換成父類類型)。
相關(guān)文章教程推薦:java快速入門