(Java downcasting)在这个例子中我做错了什么?

时间:2016-12-23 12:08:41

标签: java inheritance casting polymorphism

我试图以这种方式向下倾斜:

public static void main(String[] args){
    Animal a = new Animal();
    ((Cat)a).makePee();
}

Cat扩展Animal,两者都有相同的方法makePee()。 如果我尝试运行它,编译器会显示一条错误消息:

  

线程中的异常" main" java.lang.ClassCastException:Animal无法强制转换为Cat       在Main.main(Main.java:6)

但是在App Lern的示例中,Java显示与我一样。

1 个答案:

答案 0 :(得分:6)

好吧,a不是Cat的实例。如果你想将它向下转换为Cat,你需要实际创建一个Cat(或者某个扩展Cat的类的实例):

Animal a = new Cat();

但请注意,如果Animal声明makePee()Cat覆盖它,那么向下转换是没有意义的。您可以致电a.makePee(),并使用Cat的实施方式(前提是您实际创建了Cat,如上所述)。