2015-10-13 43 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

相關問題