教程中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
我试了你说的父类引用指向子类的对象,结果转换成功,下面是我的代码
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 {
}
}
举报