【问题标题】:(Java downcasting) What did I do wrong in this example?(Java 向下转换)在这个例子中我做错了什么?
【发布时间】:2017-05-09 03:32:42
【问题描述】:

我尝试这样沮丧:

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 的表现与我的表现完全一样。

【问题讨论】:

  • 这是一个写得很好的问题,但是“App Lern Java 的示例与我显示的完全相同”根本不可能是真的。

标签: java inheritance casting polymorphism


【解决方案1】:

嗯,a 不是Cat 的实例。如果您想将其向下转换为Cat,则需要实际创建一个Cat(或者当然是扩展Cat 的某个类的实例):

Animal a = new Cat();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    相关资源
    最近更新 更多