2014-11-21 111 views
-1

我能夠運行下面的代碼:爲什麼說靜態方法不能被繼承?

class A 
{ 
    public static void display() 
    { 
     System.out.println("Inside static method of superclass"); 
    } 
} 

class B extends A 
{ 
    public void show() 
    { 
     display(); 
    } 
} 

public class staticMethodInheritance { 
    public static void main(String[] args) { 
     B b = new B(); 
     b.display(); 
    } 
} 

現在,我能夠從B類的實例訪問該方法顯示(),那麼爲什麼它說,靜態方法不能被繼承。如果我在類B中聲明一個方法顯示,那麼據說超類中的方法是隱藏的,並且子類中的方法再次被調用,這不是我們重寫方法時所需的行爲。

+0

恩,事實並非如此。但是這些方法不能被覆蓋(然後繼承),只能隱藏。 – 2014-11-21 05:41:11

回答

0

inherited static (class) methods and inherited non-static (instance)方法唯一不同的是,當你寫的具有相同簽名一個新的靜態方法,the old static method is just hidden, not overridden.

靜態方法繼承,但不能被覆寫它們可以被重新定義。

+0

你是什麼意思是由隱藏和不覆蓋。我沒有看到行爲 – 2014-11-21 05:44:50

+0

@kapilchhattani更多閱讀[這裏](http://stackoverflow.com/questions/10291949/are-static-methods-inherited-in-java)和[這裏](http:// www.geeksforgeeks.org/can-we-overload-or-override-static-methods-in-java/) – 2014-11-21 05:46:08

+0

我知道這些概念,但我想我沒有把我的問題寫得很好。但無論如何感謝你的答案,我會把你的標記爲正確的。 – 2014-11-21 05:53:07