【发布时间】:2023-04-05 17:11:01
【问题描述】:
我在下面写了多态性的例子。
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 的实例。
我还能对面试官的反问做出什么解释?
【问题讨论】:
-
投反对票的人,你能解释一下问题有什么问题,以便我改进吗?
-
我会要求澄清,因为我不明白柜台问题。没有“幕后”。编译器知道
dp是DynamicPolymorphism,所以它只允许调用它知道的,即调用DynamicPolymorphism声明的方法。基本如你所说。这就是像 Java 这样的 statically-typed 语言的基本性质。 -
@Andreas 您的回答很贴切,我只是在看这里,关于多态性,我是否遗漏了一些东西。谢谢
标签: java polymorphism subclass superclass