不能在运行时在java中向下转发

我有一个类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 

动物不能是一只狗可以是一只猫或其他像你的情况一样的动物

 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 ,如果是为了训练目的,那没关系。

如果你想避免运行时exception,你可以做这个检查,但它会慢一点。

  Animal a = new Dog(); Dog dog = null; if(a instanceof Dog){ dog = (Dog)a; }