1

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

1 回答 1

8

动物不能是狗,可以是猫或其他东西,例如在您的情况下是动物

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;
  }
于 2013-07-06T03:08:23.527 回答