2014-10-18 135 views
0

我有這2類在派生類中實現一個抽象方法靜態

class A { 

public void foo1() { 
...;  
foo2();  
...;   
} 


protected abstract foo2(); 

} 




class B extends A { 

public foo2() {  
......  
} 

我需要foo2的是靜態的,所以我可以做B.foo2(),但我也想在A類的功能,以保持.n

有什麼建議嗎?

}

+0

如果它是抽象的,則類「A」中沒有'foo2'功能。而'B'必須爲繼承鏈實現'foo2'纔有效。 – 2014-10-18 02:21:31

+3

你不能做你所問的技術(在子類中使抽象方法變爲靜態)。但是你試圖解決的實際問題是什麼?詢問你想解決的高層次問題;不要問一個可感知的技術解決方案。 (見[X-Y問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)] – 2014-10-18 02:24:27

回答

0

您無法重寫靜態方法或將靜態方法實現爲抽象方法。

靜態方法是在類定義上定義的,而不是在類實例上定義的。抽象方法在類實例上定義。

0

你說的事實上沒有意義。

雖然我不太明白爲什麼你需要做的,有一種變通方法:

class B { 
    @Override 
    public void foo() { 
     fooUtil(); 
    } 

    public static void fooUtil() { 
     // your impl here 
    } 
} 

然後,你可以做B.fooUtil()代替,並用自己的行爲來覆蓋A.foo()

相關問題