2013-04-14 40 views
2
abstract class AbstractCase2 { 
    abstract static void simpleMethod1();//giving error 
} 

class Case2 extends AbstractCase2 { 
    static void simpleMethod1() { 
    System.out.println("Within simpleMethod1"); 
} 
    public static void main(String args[]) {    
    simpleMethod1();    
    System.out.println("with AwM"); 
    }  
} 

得到錯誤的錯誤非法組合:抽象靜態類Java中給予修飾

C:\>javac Case2.java 
Case2.java:8: error: illegal combination of modifiers: abstract and static 
     abstract static void simpleMethod1(); 
        ^
1 error 
+0

靜態方法不能抽象,就像消息說的那樣。 – EJP

回答

10

靜態方法怎麼可以是抽象的? 靜態方法不會被覆蓋!

如果你想使你的方法抽象,使其成爲非靜態

抽象方法的設計結構。您創建抽象方法是因爲您希望您的子類能夠覆蓋它們,但是靜態方法與類而不是它們的實例相關聯,因此它們不能被覆蓋。

+1

爲什麼我不能告訴編譯器其中一個子類將實現靜態方法?這看起來很荒謬。 –

+0

@BrianHannay:當靜態方法不能被覆蓋時,子類不會進入畫面。 – Lokesh

+0

我覺得我進入[這](http://stackoverflow.com/a/2223803/1979230)辯論... –

6

static abstract使您的編譯器轟然倒塌。

你從不同的方向拉它。

static:嘿,編譯器,這裏是我的方法的代碼,可以在需要時隨時使用,即使你沒有創建實例。

摘要:嘿編譯器,我將把代碼放在我的方法中,在未來的一個子類中。

編譯器:那麼你有代碼或什麼?不好了!讓我拋出一個錯誤...

+1

+1爲擬人 –

+1

@OdedBreiner多態性的近親 –