我在下面写了多态性的例子。
package tsys;
public class DynamicPolymorphism {
public void eat(){
System.out.println("DynamicPolymorphism");
}
}
class AnotherClass extends DynamicPolymorphism{
public void eat(){
System.out.println("Another Class");
}
public void consume(){
System.out.println("consume");
}
}
class TestPolymorphism{
public static void main(String args[]){
DynamicPolymorphism dp = new AnotherClass();
dp.eat();//Works fine
dp.consume();//compile time error
}
}
现在问题是编译器抱怨dp.consume()
的原因?我在接受采访时向我询问了这个问题
“在编译时,编译器只知道引用类型,因为dp
的类型是DynamicPolymorphism
,因此编译器无法找到consume
方法。”
访谈员反驳我的回答并询问编译器提供错误的幕后情况,但我们将变量dp
引用到AnotherClass
的实例。
还有什么我可以解释面试官反对的问题?
答案 0 :(得分:-2)
dp声明为DynamicPolymorphism。因此,我们对AnotherClass的方法一无所知。如果你想调用consume,那么你需要进行类型转换并调用consume。 try((AnotherClass)dp).cosume()