Animal animal = dog 執(zhí)行后 animal 是基于哪個類型的?為什么 Cat cat = (Cat) animal; 執(zhí)行后回事false呢?
package?com.myjava2.polymorphic; public?class?Initial?{ public?static?void?main(String[]?args)?{ ?????? ????????Dog?dog?=?new?Dog();//dog是Dog類型的實例 ??????? ????????Animal?animal?=?dog;//向下類型轉(zhuǎn)換 ????????if(animal?instanceof?Dog){ ????????Dog??dog2?=?(Dog)animal;//強制類型轉(zhuǎn)換 ????????}else{ ???????? System.out.println("無法進行類型轉(zhuǎn)換"); ????????} ????????if(animal?instanceof?Cat){ ????????Cat?cat?=?(Cat)?animal;//1.編譯是Cat類型?2.運行是Dog類型 ????????}else{???????? ???????? System.out.println("無法進行類型轉(zhuǎn)換"); ????????} } }
求解答
2017-06-13
這是面向?qū)ο笾卸鄳B(tài)的特性,
2017-06-13
因為雖然我們對dog向上類型轉(zhuǎn)換成了Animal,但是它是屬于Dog類的,所以我們對animal進行判斷時,它屬于Dog類而不是Cat類(即第一個會進行強轉(zhuǎn),第二個會輸出:"無法進行類型轉(zhuǎn)換")。通俗的說我們可以把所有的動物放在animal類里面;但不會因為我們放在animal類里面而改變其種類。
2017-06-13
先聲明了一個Dog類的dog對象,然后申明Animal類的animal對象轉(zhuǎn)換為Dog類中的dog對象,二cat為Cat類的對象,Cat是Animal的子類,如果向上轉(zhuǎn)化類型將cat轉(zhuǎn)換為animal時,因為之前animal為dog轉(zhuǎn)換而來的所以animal現(xiàn)在是Dog類,所以會發(fā)生錯誤。(我是這樣理解的,不知道正確不,不知道幫到你沒有)
2017-06-13
先聲明了一個Dog類的dog對象,然后申明Animal類的animal對象轉(zhuǎn)換為Dog類中的dog對象,二cat為Cat類的對象,Cat是Animal的子類,如果向上轉(zhuǎn)化類型將cat轉(zhuǎn)換為animal時,因為之前animal為dog轉(zhuǎn)換而來的所以animal現(xiàn)在是Dog類,所以會發(fā)生錯誤。(我是這樣理解的,不知道正確不,不知道幫到你沒有)
2017-06-13
因為這個時候的animal指的是dog ?不能再指cat了