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
is an Animal
.
现在参考的是Animal
. Does Animal
have a bark()
方法?不。ERROR.
May be d
is a Dog
里面但编译器不知道并且编译器不应该知道,编译器翻译你所说的内容d
在这种情况下。这就是你收到错误的原因。
现在你可以看出我想要d
充当Dog
因为我知道d
is a Dog
by,
((Dog) d);
然后打电话bark()
((Dog) d).bark();
所以编译器会采取d
as a Dog
仅用于此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)