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

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

教程中animal向dog的向下轉換是不是一個特例?

如果這樣寫:

Animal animal = new Animal();

Dog dog = (Dog)animal;

運行的時候會報錯

而教程的例子中是先創建dog,讓animal指向它,再創建dog2的時候才能用(Dog)animal賦值。

所以教程中的例子是不是一個特例?一般情況下應該是不能將父類實例強制轉換成子類引用的吧?

正在回答

5 回答

你創建的是父類方法,你看看子類有多少個,系統無法識別指向哪一個,當然會報錯,你下面說的不太理解,我查查看

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

慕尼黑2980719 提問者

非常感謝!
2016-08-09 回復 有任何疑惑可以回復我~
#2

慕尼黑2980719 提問者

剛剛也在書上看到了,如果試圖把一個父類實例轉換成子類類型,則這個對象必須實際上是子類實例才行,否則運行時會有異常。 所以如果animal實際指向的是dog,那它就能強制轉換為Dog 如果animal指向的是Animal,那它強制轉換成Dog之后,運行的時候會出錯 即,以下轉換是可以的: Animal animal = new Dog();//animal實際指向Dog Dog dog = (Dog)animal; 而以下轉換是不行的: Animal animal = new Animal();//animal實際指向Animal Dog dog = (Dog)animal;
2016-08-09 回復 有任何疑惑可以回復我~

public class Demo{

public static void main(String[] args) {

Animal a=new Animal();

a=new Cat();

if(a instanceof Cat){

Cat c=(Cat)a;

c.test();

}else {System.out.println("無法進行強制轉換");

}

}

}

class Animal {

public void test(){

System.out.println("轉換成功");

}

}

class Cat extends Animal {

}


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

我試了你說的父類引用指向子類的對象,結果轉換成功,下面是我的代碼

package com.測試;

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

Animal a=new Cat();

if(a instanceof Cat){

Cat c=(Cat)a;

c.test();

}else System.out.println("無法進行強制轉換");

}


class Animal {

public void test(){

System.out.println("轉換成功");

}


class Cat extends Animal {

}

}





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

抱歉,我好像說錯了,

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

好吧,也百度到了一些東西

Java中父類強制轉換成子類的原則:父類型的引用指向的是哪個子類的實例,就能轉換成哪個子類的引用。

希望大家能一起討論

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

舉報

0/150
提交
取消

教程中animal向dog的向下轉換是不是一個特例?

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

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

幫助反饋 APP下載

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

公眾號

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