教程中animal向dog的向下轉換是不是一個特例?
如果這樣寫:
Animal animal = new Animal();
Dog dog = (Dog)animal;
運行的時候會報錯
而教程的例子中是先創建dog,讓animal指向它,再創建dog2的時候才能用(Dog)animal賦值。
所以教程中的例子是不是一個特例?一般情況下應該是不能將父類實例強制轉換成子類引用的吧?
如果這樣寫:
Animal animal = new Animal();
Dog dog = (Dog)animal;
運行的時候會報錯
而教程的例子中是先創建dog,讓animal指向它,再創建dog2的時候才能用(Dog)animal賦值。
所以教程中的例子是不是一個特例?一般情況下應該是不能將父類實例強制轉換成子類引用的吧?
2016-07-18
舉報
2016-07-23
你創建的是父類方法,你看看子類有多少個,系統無法識別指向哪一個,當然會報錯,你下面說的不太理解,我查查看
2016-07-24
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 {
}
2016-07-23
我試了你說的父類引用指向子類的對象,結果轉換成功,下面是我的代碼
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 {
}
}
2016-07-23
抱歉,我好像說錯了,
2016-07-18
好吧,也百度到了一些東西
Java中父類強制轉換成子類的原則:父類型的引用指向的是哪個子類的實例,就能轉換成哪個子類的引用。
希望大家能一起討論