为什么父类和子类都实现相同的接口?

2022-09-01 07:31:14

我继承了一些遗留的Java(1.4)代码,这个设计决策经常出现。我不明白它是否有任何目的或理由。

public interface SoapFacade extends iConfigurable{ }

public class SoapFacadeBase implements SoapFacade{
...
}

public class SoapFacadeImpl extends SoapFacadeBase implements SoapFacade{
...
}

根据我对接口的理解(我的实验得到了加强),让父接口和子接口实现相同的接口是没有目的的。在此方案中,from 的所有内容都在 中实现,但 in 中的方法在 中实现。但是,这并不需要实现 。SoapFacadeSoapFacadeBaseiConfigurableSoapFacadeImplSoapFacadeImplSoapFacade

关于接口,是否有一些我不知道的东西会给这种模式带来一些目的或好处?除了缺乏清晰度之外,是否存在潜在的成本来推动重构?还是应该简单地重构它以获得清晰度/简单性?


答案 1

根据我对接口的理解(我的实验得到了加强),让父接口和子接口实现相同的接口是没有目的的。

不。从技术上讲,它完全是多余的。

但是,它确实记录了您打算成为的事实,并且如果您(或其他人)决定从基类中删除,它将确保您收到编译错误。SoapFacadeImplSoapFacadeimplements SoapFacade

您可以在标准 Java 集合 API 中随处可见此模式。 实现,即使它的基类 () 已经实现。相同的 / 和接口。ArrayListListAbstractListHashSetAbstractSetSet


答案 2

如果您使用界面也作为标记。 将仅返回直接实例化的接口。Class.getInterfaces();


推荐