亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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("無法進行類型轉換");
????????}
	}

}

求解答

正在回答

5 回答

這是面向對象中多態的特性,

Animal?動物?=?狗,此時(動物)的類型屬于Animal,值為狗,這是多態中類型的向下轉換,是成立的
Cat?貓?=?(Cat)動物,此時(貓)的類型屬于Cat,值為動物(且該動物已被賦為了狗)

你可以說動物中包含狗,動物是狗的分類
你不可以說貓中包含狗,貓是狗的分類,這樣說會不會很怪,因它不成立,所以會返回false


3 回復 有任何疑惑可以回復我~
#1

小光頭 提問者

非常感謝!
2017-06-13 回復 有任何疑惑可以回復我~

因為雖然我們對dog向上類型轉換成了Animal,但是它是屬于Dog類的,所以我們對animal進行判斷時,它屬于Dog類而不是Cat類(即第一個會進行強轉,第二個會輸出:"無法進行類型轉換")。通俗的說我們可以把所有的動物放在animal類里面;但不會因為我們放在animal類里面而改變其種類。

0 回復 有任何疑惑可以回復我~

先聲明了一個Dog類的dog對象,然后申明Animal類的animal對象轉換為Dog類中的dog對象,二cat為Cat類的對象,Cat是Animal的子類,如果向上轉化類型將cat轉換為animal時,因為之前animal為dog轉換而來的所以animal現在是Dog類,所以會發生錯誤。(我是這樣理解的,不知道正確不,不知道幫到你沒有)

0 回復 有任何疑惑可以回復我~

先聲明了一個Dog類的dog對象,然后申明Animal類的animal對象轉換為Dog類中的dog對象,二cat為Cat類的對象,Cat是Animal的子類,如果向上轉化類型將cat轉換為animal時,因為之前animal為dog轉換而來的所以animal現在是Dog類,所以會發生錯誤。(我是這樣理解的,不知道正確不,不知道幫到你沒有)

0 回復 有任何疑惑可以回復我~

因為這個時候的animal指的是dog ?不能再指cat了

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

Animal animal = dog 執行后 animal 是基于哪個類型的?為什么 Cat cat = (Cat) animal; 執行后回事false呢?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號