实现不执行任何操作的接口方法

4
假设我有以下接口和类:
interface IListener
{
   void f();
   void g();
   void h();
}

class Adapter implements IListener
{
   void f() {}
   void g() {}
   void h() {}
}

如果这些接口方法什么都不做,实现它们有什么意义呢?
问题来源于《设计模式Java练习册》
2个回答

10

这个接口适配器的目的是使实现更容易,如果你不需要所有方法,你可以扩展适配器并仅重写你想要的方法。这些类仅为方便而存在。

例如,在 Swing 中,当实现一个 MouseListener 时,你可能不想处理全部的鼠标事件。在这种情况下,你可以扩展 MouseAdapter 并只处理你感兴趣的事件。

请注意,Adapter 类通常也会实现该接口。


如果你将一个接口公开,你应该预计人们会直接实现它。至少其中一些人会这样做。如果你想确保破坏任何实现,请不要创建接口,只创建空方法。 - Vivien Barousse
请注意,Adapter类通常也实现了接口......但并非总是如此。 - Esben Skov Pedersen

2
在你发布的示例中,它是无用的。但是,如果你创建一个适配器来实现IListener接口(class Adapter implements IListener),它就变得更有用了,因为你可以像这样实例化一个Adapter对象:new Adapter()
否则,Adapter将保持抽象类,直到接口中定义的所有方法都有适当的实现之前,它既不能被实例化,也不能被其子类化。空实现也是一种适当的实现。

我已经进行了更正,那是一个打字错误。抱歉。 - Adrian
1
好事你早点修复了,现在你只需要向2个人道歉就可以了 :-) - dr jerry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接