2012-05-07 89 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的界面不可见,这是一个有效的假设。因此,我认为最好在这里使用委托,而不是创建一个新类。

相关问题