为什么父类和子类都实现相同的接口?
我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
/ AbstractSet
和Set
接口。
如果你使用的界面也作为一个标记。 Class.getInterfaces();
只会直接返回实例化的接口。
我其实觉得这个devise毫无意义。 正如你所说的,被实现的接口只是被inheritance的,所以不需要在子类中复制和粘贴“implements SomeInterface”。 这不是更清楚,更聪明,或者…
这是无稽之谈,不要这样做。
特别是在像Java集合的公共API。 这绝对是无稽之谈。