为什么这个错误,我的编译器无法捕获?

时间:2020-07-08 03:15:57

标签: java typecasting-operator

我的编译器没有显示任何错误,但确实给出了运行时错误,有人可以告诉我我所做的类型转换有什么问题吗?
代码显示错误

Exception in thread "main" java.lang.ClassCastException: class practice.Animal cannot be cast to class practice.Dog (practice.Animal and practice.Dog are in unnamed module of loader 'app'`)

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

ClassCastException 是Java中的运行时异常,当我们试图将类从一种类型不正确地转换为另一种类型时,会出现这种异常。而且由于它是运行时异常,因此它不能在编译时出现,而是在运行时出现。

创建对象后,您将无法更改其类型。这就是为什么您不能将动物投给狗的原因。

但是,如果创建子类的对象,则可以在超类类型的变量中保留对它的引用,以后再将其强制转换为子类类型。

这将起作用:

Animal a = new Dog ();
Dog d = (Dog) a;

这是您处理ClassCastException的方式:

  1. 在尝试将一个类的对象转换为另一个类时要小心。确保新类型属于其父类之一。

  2. 您可以通过使用泛型来防止ClassCastException,因为泛型提供了编译时检查,可用于开发类型安全的应用程序。