Rig*_*ggy 29 java inheritance interface
我继承了一些遗留的Java(1.4)代码,这个设计决定定期出现.我无法理解它是否有任何目的或理由.
public interface SoapFacade extends iConfigurable{ }
public class SoapFacadeBase implements SoapFacade{
...
}
public class SoapFacadeImpl extends SoapFacadeBase implements SoapFacade{
...
}
Run Code Online (Sandbox Code Playgroud)
据我了解接口(以及我的实验已经强化),没有任何目的让父和子实现相同的接口.在这种情况下,所有内容都在其中SoapFacade实现SoapFacadeBase,但方法iConfigurable实现于SoapFacadeImpl.但是,这并不需要SoapFacadeImpl实现SoapFacade.
有什么我不知道的接口会给这种模式一些目的或好处吗?除了缺乏清晰度之外,还有潜在的成本会导致重构吗?或者是否应该为了清晰/简单而进行重构?
aio*_*obe 40
据我了解接口(以及我的实验已经强化),没有任何目的让父和子实现相同的接口.
不.从技术上讲,它完全是多余的.
但是,如果您(或其他人)决定从基类中删除,它确实会记录您打算SoapFacadeImpl成为a SoapFacade并确保您收到编译错误的事实implements SoapFacade.
您可以在标准Java Collections API中的任何位置看到此模式.ArrayList实现了List即使其基类(AbstractList)已经,确实.同样适用于HashSet/ AbstractSet和Set接口.