java - 为什么bark方法无法调用

标签 java inheritance

class Animal{
    void run() {
    }
}
class Dog extends Animal {
    void bark() {
    }
}
class Testing{
    public static void main(String[] args)  {
        Animal d = new Dog();
        d.run();
        d.bark();
    }
}

我试图使用狗类的对象调用吠叫方法,该对象的引用存储在动物类变量中。但它向我显示编译时错误。谁能解释一下为什么?

最佳答案

这就是它的工作原理。

当编译器尝试检测谁是d时.?它看到了。

Animal d

编译器不知道它是如何创建的,请查看引用类型。所以,dAnimal

现在引用是Animal 。是Animal有一个bark()方法?不。 错误

可能是dDog里面但编译器不知道并且编译器不应该知道,编译器翻译你所说的d在这种情况下。这就是您收到错误的原因。

现在你可以看出我想要 d充当 Dog因为我知道dDog通过,

((Dog) d);

然后调用bark()

((Dog) d).bark();

因此编译器将采用 d作为Dog仅用于此操作。

关于java - 为什么bark方法无法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30573976/

相关文章:

python - 我怎样才能要求从元类的抽象方法中调用 super() ?

java - 将文件作为参数传递

C++覆盖子类创建的对象的功能

python - 如何使用装饰器来修改可变类变量?

java - Android - 通过相机检测图像处理?

java - 当我无法使用基类引用调用派生类方法时,动态多态性有何用处

python - 调用 super().__init__() 时会给出错误的方法

java - 如何采取第二个 Action 来移动棋子?

java - 使用 JMX 进行负载平衡

java - 我应该为以下功能编写哪些单元测试用例?另外,如何提供示例 JSONobject 作为函数中的参数?