如何摆脱继承

Pau*_*cca 5 architecture oop inheritance interface extend

我在这里和其他论坛搜索过,找不到一个好的答案.我知道扩展课程不是最好的练习.我应该更多地使用Interfaces.我的问题是通常我开始创建接口然后转移到抽象类,因为我总是希望在超类上实现一些功能,这样我就不必在每个子类中复制它.例如,我有一个Vehicle类和Car and Bike子类.可以在Vehicle类上实现很多功能,例如Move()和Stop(),那么保持架构清洁,避免代码重复和使用接口而不是继承的最佳做法是什么?非常感谢!

(如果你不知道我为什么这么问你可能会读到这篇有趣的文章:http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html)

Pet*_*SFT 0

同意 tofutim - 在您当前的示例中,在车辆上移动和停止是合理的。

读完这篇文章后 - 我认为它使用强大的语言来推动一个观点......记住 - 继承是帮助完成工作的工具。

但是,如果我们假设出于某种原因您在这种情况下不能/不会使用该工具,那么您可以首先将其分解为带有辅助对象和/或访问者的小接口......

例如 - 车辆类型包括潜艇、船、飞机、汽车和自行车。您可以将其分解为接口... IMoveable + Forward() + Backward() + Left() + Right()

IFloatable + Dock()

ISink() + 吹气()

IFly() + 起飞() + 着陆()

然后您的类可以聚合您刚刚定义的大量接口。

问题是,您最终可能会在汽车/自行车类中为 IMoveable.Left() 和 IMoveable.Right() 重复一些代码。您可以将其分解为帮助器方法并聚合该帮助器...但是如果您遵循它的逻辑结论,您最终仍然会将许多内容重构回基类。

继承和聚合都是工具……两者都不是“邪恶的”。

希望有帮助。