2012-05-07 68 views
25

代碼,如:在Java中,匿名類可以擴展另一個類嗎?

protected Interface1 varClass1 = new Interface1() { 

但我也想,這個匿名嵌套類也是擴展的類Base,是這樣的:

protected Interface1 varClass1 = new Interface1() extends Base { 
.... 

這是可能在Java中?

+1

@EranMedan - 這個問題是專門關於同時做兩件事:擴展一個類,同時實現一個接口。另一個問題是關於單獨做一個人。 –

+0

@DavidHarkness你是對的,對我來說,早上5點不再是這樣 –

+2

對我來說,感覺就像你想要的匿名課是一種精神分裂症。特別是如果它需要與包含類的字段進行交互。我強烈建議你冥想,如果你真的需要的是輕微的重新設計。 – Buhb

回答

28

匿名類可以實現一個接口擴展一個類。

一個解決方法是創建一個擴展Base並實現Interface1命名類,然後用其作爲基類的匿名類:

public abstract class Base1 extends Base implements Interface1 {} 

... 

protected Interface1 varClass1 = new Base1() { 
    ... 
+4

+1,很好的解決方案!我唯一要補充的是,如果你需要這樣做,那麼這暗示你超出了匿名類的使用範圍,應該考慮完全命名的內部類。 – mikera

+1

要限制'Base1'的範圍,甚至可以在使用該方法之前將其聲明在方法中。 – aioobe

+0

@aioobe - *方法裏面* –

3

雖然不可能都擴展一個類,實現一個接口,使用delegation可能可以實現什麼。

只需在您的匿名類的初始化程序中創建Base的實例,並使用您實施的方法中的方法Interface1

編輯:我的答案假定你只想從Base繼承,因爲它的實現,而不是因爲它的接口。考慮到將對象分配給Interface1變量後,Base的界面不可見,這是一個有效的假設。因此,我認爲最好在這裏使用委託,而不是創建一個新類。

相關問題