教程中animal向dog的向下轉(zhuǎn)換是不是一個(gè)特例?
如果這樣寫:
Animal animal = new Animal();
Dog dog = (Dog)animal;
運(yùn)行的時(shí)候會(huì)報(bào)錯(cuò)
而教程的例子中是先創(chuàng)建dog,讓animal指向它,再創(chuàng)建dog2的時(shí)候才能用(Dog)animal賦值。
所以教程中的例子是不是一個(gè)特例?一般情況下應(yīng)該是不能將父類實(shí)例強(qiáng)制轉(zhuǎn)換成子類引用的吧?
2016-07-23
你創(chuàng)建的是父類方法,你看看子類有多少個(gè),系統(tǒng)無法識(shí)別指向哪一個(gè),當(dāng)然會(huì)報(bào)錯(cuò),你下面說的不太理解,我查查看
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("無法進(jìn)行強(qiáng)制轉(zhuǎn)換");
}
}
}
class Animal {
public void test(){
System.out.println("轉(zhuǎn)換成功");
}
}
class Cat extends Animal {
}
2016-07-23
我試了你說的父類引用指向子類的對象,結(jié)果轉(zhuǎn)換成功,下面是我的代碼
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("無法進(jìn)行強(qiáng)制轉(zhuǎn)換");
}
class Animal {
public void test(){
System.out.println("轉(zhuǎn)換成功");
}
class Cat extends Animal {
}
}
2016-07-23
抱歉,我好像說錯(cuò)了,
2016-07-18
好吧,也百度到了一些東西
Java中父類強(qiáng)制轉(zhuǎn)換成子類的原則:父類型的引用指向的是哪個(gè)子類的實(shí)例,就能轉(zhuǎn)換成哪個(gè)子類的引用。
希望大家能一起討論