我在这里和其他论坛搜索过,找不到一个好的答案.. 我知道扩展课程不是最好的练习.我应该更多地使用Interfaces.我的问题是通常我开始创建接口然后转移到抽象类,因为我总是希望在超类
我知道扩展课程不是最好的练习.我应该更多地使用Interfaces.我的问题是通常我开始创建接口然后转移到抽象类,因为我总是希望在超类上实现一些功能,这样我就不必在每个子类中复制它.
例如,我有一个Vehicle类和Car and Bike子类.可以在Vehicle类上实现很多功能,例如Move()和Stop(),那么保持架构清洁,避免代码重复和使用接口而不是继承的最佳做法是什么?
非常感谢!
(如果你不知道我为什么这么问你可能会读到这篇有趣的文章:http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html)
同意tofutim – 在你当前的例子中,移动和停止在Vehicle上是合理的.阅读了这篇文章 – 我认为它正在使用强大的语言来强调一点……记住 – 继承是一种帮助完成工作的工具.
但是,如果我们假设无论出于何种原因你不能/不会在这种情况下使用该工具,你可以先将它分解为与辅助对象和/或访问者的小接口……
例如 –
车型包括潜艇,船,飞机,汽车和自行车.你可以把它分解成接口……
IMoveable
向前()
向后()
剩下()
对()
IFloatable
码头()
ISINK()
BlowAir()
我飞()
脱掉()
土地()
然后你的类可以聚合你刚刚定义的过多接口.
问题是你最终可能会在汽车/自行车类中为IMoveable.Left()和IMoveable.Right()复制一些代码.您可以将其纳入辅助方法并聚合帮助程序……但是如果您遵循它的逻辑结论,您仍然会将很多东西重构为基类.
继承和聚合是工具……两者都不是“邪恶的”.
希望有所帮助.