2013-04-21 137 views
-4

這與問題here幾乎相同。「A不能是B的超級接口;一個超級接口必須是一個接口「

但我的問題擴展了這一點。

我可以將其更改爲「A擴展B」,但然後我必須使我的方法非靜態,並且只是將我的整個系統擰緊。

有什麼辦法可以解決這個問題嗎?

好吧,讓我們說,我已經有了與方法AA和方法BB

public class A { 

    public static final BB(){ 

    } 
    public static final AA(){ 

    } 
    } 
} 

這組現在我已經得到了另一個類,它實現它,但它也有它的方法AA的自己的版本和A類BB。

public class AImpl implements A { 

    public BB(){ 

    } 
    public AA(){ 

    } 
    } 
} 

現在,如果我嘗試擴展類,我會得到錯誤「實例方法不能覆蓋靜態方法從A」。

所以後來它說我可以從A類去除靜態解決這個

我這樣做,那麼它告訴我,幾乎所有其他的大概有50類不能引用從非靜態方法A類的方法BB。

+1

您可以請發佈您實際正在嘗試做什麼,最好是使用代碼? – Antimony 2013-04-21 23:16:48

+0

在你給出的例子中,你的第一部分「代碼」是一個類。你的第二部分試圖實現它。類可以擴展類,但它們只能實現接口。 – jschabs 2013-07-10 19:24:31

回答

6

interface s不能有static方法。他們可以有static final常量,但不包括方法。

如果你想有static方法,你需要使用一個abstract class

interface Iface { 
    void doStuff();   
} 

abstract class Base implements Iface { 
    static void doStaticStuff() { 

    } 
} 

編輯

不能覆蓋static方法。其他課程你也不能implement

extend其他類。

不能解決您的問題,除非你要麼做方法一類非static或使方法中的其他類static

static class A { 
    static void a(){} 
} 

static class B extends A { 
    static void a(){} 
} 

你正在嘗試做沒有任何意義。實例方法如何覆蓋static方法?

注意這並沒有覆蓋a()方法A僅僅是建立在B另一個a()方法。呼叫A.a()將調用A中的方法a(),類B.a()將調用B中的方法a()

static方法在兩個不同的類中調用相同的東西並沒有什麼意義,因爲它會導致靜態導入問題,並給人一種類中的方法會覆蓋另一類的方法的印象。它沒有。

無論如何,即使如果您可以覆蓋static方法;你的也是final這使得這是不可能的。即使您刪除了static,也將無法覆蓋這些方法,除非您還刪除了final