2015-10-13 16 views
-1

Java问题:有人可以告诉我为什么声明obj.f1();下面不起作用 以及如何解决它?提前致谢。Java:使用对象作为超类(为什么给定的语句不工作,以及如何解决它?)

class X{ 
    void f1() { 
     System.out.println("XXX") ; 
    } 
} 

class Y extends X { 
    void f1(){ 
     System.out.println("YYY"); 
    } 
}  



public class Test { 


    public static void main(String[] args) { 

     Object obj = new Y(); 
     obj.f1(); // why this does not work? 

    } 

} 
+0

如果我正确地认为这是Java,请通过您的文章下的编辑按钮添加java标记。 – AlphaModder

+0

是的,这是Java。 – Mariav

回答

0

假设这是java的,因为你还没有将其标记为这样:

你似乎是的印象是,Java是动态类型检查,而在现实中,它是静态的。这意味着由于您已将obj声明为Object,编译器会拒绝您的代码,因为Object没有方法f1()

编译器不关心你初始化它到什么地方,本地/字段的delared类型(前面的那个)确定可以调用的东西。

要解决这个问题,您需要声明objY,如下所示:Y obj = new Y();

+0

谢谢你回答我的问题。 – Mariav

+0

@Mariav没问题。如果我的解决方案有帮助,如果您可以通过单击左侧的复选标记来接受它,我将不胜感激。 :) – AlphaModder

相关问题