我有一个类Animal和一个类Dog如下:
class Animal{}
class Dog extend Animal{}
主要课程:
class Test{
public static void main(String[] args){
Animal a= new Animal();
Dog dog = (Dog)a;
}
}
错误显示:
Exception in thread "main" java.lang.ClassCastException: com.example.Animal cannot be cast to com.example.Dog
答案 0 :(得分:7)
动物不能是一只狗可以是一只猫或其他像你的情况一样的动物
Animal a= new Animal(); // a points in heap to Animal object
Dog dog = (Dog)a; // A dog is an animal but not all animals are dog
对于向下转发你必须这样做
Animal a = new Dog();
Dog dog = (Dog)a;
顺便说一下,向下转发是危险的,你可以拥有这个RuntimeException
,如果是为了培训目的就可以了。
如果你想避免运行时异常,你可以做这个检查,但它会慢一些。
Animal a = new Dog();
Dog dog = null;
if(a instanceof Dog){
dog = (Dog)a;
}