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
编译器不知道它是如何创建的,请查看引用类型。所以,d
是 Animal
。
现在引用是Animal
。是Animal
有一个bark()
方法?不。 错误。
可能是d
是 Dog
里面但编译器不知道并且编译器不应该知道,编译器翻译你所说的d
在这种情况下。这就是您收到错误的原因。
现在你可以看出我想要 d
充当 Dog
因为我知道d
是 Dog
通过,
((Dog) d);
然后调用bark()
((Dog) d).bark();
因此编译器将采用 d
作为Dog
仅用于此操作。
关于java - 为什么bark方法无法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30573976/