Animal animal = dog 執(zhí)行后 animal 是基于哪個(gè)類型的?為什么 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類型的實(shí)例 ??????? ????????Animal?animal?=?dog;//向下類型轉(zhuǎn)換 ????????if(animal?instanceof?Dog){ ????????Dog??dog2?=?(Dog)animal;//強(qiáng)制類型轉(zhuǎn)換 ????????}else{ ???????? System.out.println("無法進(jìn)行類型轉(zhuǎn)換"); ????????} ????????if(animal?instanceof?Cat){ ????????Cat?cat?=?(Cat)?animal;//1.編譯是Cat類型?2.運(yùn)行是Dog類型 ????????}else{???????? ???????? System.out.println("無法進(jìn)行類型轉(zhuǎn)換"); ????????} } }
求解答
2017-06-13
這是面向?qū)ο笾卸鄳B(tài)的特性,
2017-06-13
因?yàn)殡m然我們對dog向上類型轉(zhuǎn)換成了Animal,但是它是屬于Dog類的,所以我們對animal進(jìn)行判斷時(shí),它屬于Dog類而不是Cat類(即第一個(gè)會進(jìn)行強(qiáng)轉(zhuǎn),第二個(gè)會輸出:"無法進(jìn)行類型轉(zhuǎn)換")。通俗的說我們可以把所有的動(dòng)物放在animal類里面;但不會因?yàn)槲覀兎旁赼nimal類里面而改變其種類。
2017-06-13
先聲明了一個(gè)Dog類的dog對象,然后申明Animal類的animal對象轉(zhuǎn)換為Dog類中的dog對象,二cat為Cat類的對象,Cat是Animal的子類,如果向上轉(zhuǎn)化類型將cat轉(zhuǎn)換為animal時(shí),因?yàn)橹癮nimal為dog轉(zhuǎn)換而來的所以animal現(xiàn)在是Dog類,所以會發(fā)生錯(cuò)誤。(我是這樣理解的,不知道正確不,不知道幫到你沒有)
2017-06-13
先聲明了一個(gè)Dog類的dog對象,然后申明Animal類的animal對象轉(zhuǎn)換為Dog類中的dog對象,二cat為Cat類的對象,Cat是Animal的子類,如果向上轉(zhuǎn)化類型將cat轉(zhuǎn)換為animal時(shí),因?yàn)橹癮nimal為dog轉(zhuǎn)換而來的所以animal現(xiàn)在是Dog類,所以會發(fā)生錯(cuò)誤。(我是這樣理解的,不知道正確不,不知道幫到你沒有)
2017-06-13
因?yàn)檫@個(gè)時(shí)候的animal指的是dog ?不能再指cat了