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