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

我试着用这种方式向下倾斜:

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

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

Exception in thread “main” java.lang.ClassCastException: Animal cannot be cast to Cat
at Main.main(Main.java:6)

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

最佳答案:

好吧,一个不是猫的实例.如果你想将它转发给Cat,你需要实际创建一个Cat(或者某个扩展Cat的类的实例,当然):

Animal a = new Cat();

但请注意,如果Animal声明makePee()并且Cat覆盖它,则向下转换是没有意义的.您可以只调用a.makePee(),然后使用Cat的实现(前提是您实际创建了Cat,如上所述).

上一篇:java – final和非final方法参数,它们被视为不同,用于确定方法重载或覆盖?


下一篇:java – 有没有办法通过使用泛型来避免instanceof?