为什么使用超类引用变量无法访问子类中的新方法

时间:2017-07-10 05:28:30

标签: java polymorphism subclass superclass

我在下面写了多态性的例子。

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的实例。

还有什么我可以解释面试官反对的问题?

1 个答案:

答案 0 :(得分:-2)

dp声明为DynamicPolymorphism。因此,我们对AnotherClass的方法一无所知。如果你想调用consume,那么你需要进行类型转换并调用consume。 try((AnotherClass)dp).cosume()