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

我inheritance了一些传统的Java(1.4)代码,这个devise决定经常出现。 我不明白是否有任何目的或理由。

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

正如我所了解的接口(我的实验已经加强),没有任何目的是让父母和孩子都实现相同的接口。 在这种情况下, SoapFacade所有内容都是在SoapFacade中实现的,但是在iConfigurable的方法是在iConfigurable中实现的。 但是,这并不需要SoapFacadeImpl实现SoapFacade

有什么我不知道的接口,会给这种模式一些目的或利益? 除了缺乏清晰度之外,是否有潜在的成本推动重构呢? 还是应该简单地重构清晰/简单?

正如我所了解的接口(我的实验已经加强),没有任何目的是让父母和孩子都实现相同的接口。

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

但是,它logging了这样的事实:如果您(或其他人)决定从基类中移除implements SoapFacade ,那么您打算将SoapFacadeImpl设置为SoapFacade并确保发生编译错误。

在标准Java Collections API中,无处不在。 ArrayList实现List即使它的基类( AbstractList )已经。 同样适用于HashSet / AbstractSetSet接口。

如果你使用的界面也作为一个标记。 Class.getInterfaces(); 只会直接返回实例化的接口。

我其实觉得这个devise毫无意义。 正如你所说的,被实现的接口只是被inheritance的,所以不需要在子类中复制和粘贴“implements SomeInterface”。 这不是更清楚,更聪明,或者…

这是无稽之谈,不要这样做。

特别是在像Java集合的公共API。 这绝对是无稽之谈。