2017-05-31 67 views
1

由於靜態方法僅限於類,爲什麼子類在下面的代碼中使用超類的靜態方法?在子類中訪問超類靜態方法

public class StaticMethodEg extends Superclass { 
    public static void main(String args[]) { 
     System.out.println(StaticMethodEg.MyStaticMethod(2313123)); 
    } 
} 

class Superclass { 
    public static int MyStaticMethod(int i) { 
     Integer value = new Integer(i); 
     return value + 1234; 
    } 
} 

輸出

2314357 
+0

***擴展子類***親愛的上帝爲什麼? –

+0

對不起錯誤的程序...糾正它 –

回答

0

代碼未編譯

System.out.println(StaticMethodEg.MyStaticMethod(2313123)); 

你要做的

System.out.println(Superclass.MyStaticMethod(2313123)); 

由於靜態方法是restricte d只類...

不是真的,該方法是公開的,因此StaticMethodEg類可以訪問這個方法呢!

0

不,publicstatic方法可用於任何地方,不僅在課堂上就在被宣佈。

static方法也繼承(如非靜態方法),見this question以獲取更多信息。在你的情況下,MyStaticMethodStaticMethodEg類繼承,因爲它extends Superclass

+0

感謝兄弟清除疑惑.. –

0

靜態方法是可繼承的但不可覆蓋。
因此,子類可以看到父類的公共靜態方法。

StaticMethodEg.MyStaticMethod(2313123)是合法的,但是的確會讓人產生誤解,因爲它可能給人的印象是StaticMethodEg類有隱藏父級的靜態方法的MyStaticMethod(int)。但事實並非如此。

Superclass.MyStaticMethod(2313123)更清楚。

+0

Ohk意味着我所做的是適用的,但不應該是有效的...還進一步繼續我發現,擴展StaticMethodEg類的子類也打印MyStaticMethod(2313123 );方法。子類的子類也打印超類的方法。 –