【发布时间】:2010-03-10 14:35:35
【问题描述】:
我最近在一些我正在处理的代码中遇到了对我来说没有意义的情况。一组类从基类继承纯粹是为了共享基类中的一些方法。没有方法覆盖,只有子类从父类调用方法。
在我看来,让子类引用父类而不是从父类继承会更好地建模,我认为这会减少不必要的复杂性。这是合理的,还是我错过了使用这样的继承的一些好处?
【问题讨论】:
标签: oop
我最近在一些我正在处理的代码中遇到了对我来说没有意义的情况。一组类从基类继承纯粹是为了共享基类中的一些方法。没有方法覆盖,只有子类从父类调用方法。
在我看来,让子类引用父类而不是从父类继承会更好地建模,我认为这会减少不必要的复杂性。这是合理的,还是我错过了使用这样的继承的一些好处?
【问题讨论】:
标签: oop
如果父类方法纯粹作为“实用程序”存在,那么是的,我同意。
问题(至少对我来说)是,如果将来可以修改父类以获得好处。意思是,逻辑上当前的关系是什么?如果它是孩子和父母之间的“是”,那就离开它。如果父级只是方法的集合,则重构为实用程序类或使用委托。
【讨论】:
你是对的。不幸的是,继承在实际不需要时被大量使用。
如果子类和父类之间不存在关系,则不应使用继承。
【讨论】:
继承可以以不同的方式使用(和滥用!)。以下是三大类。
概念层次结构:
概念上相关的类可以是 组织成一个专业 层次结构:
- 人员、员工、经理
- 几何对象 ...
多态性:
不同但相关的对象 类可以由统一处理 客户
- 几何对象数组
软件复用:
相关类可能共享接口, 数据结构或行为。
- 几何对象 ...
有关不同形式继承的完整研究,请阅读On the notion of inheritance。
您提到的情况是软件重用。没有is-a关系,最多有has-a关系。目标主要是重用相同的代码。
正如您所建议的,这可以使用 delegation 进行重构,如果方法本质上是静态的,甚至可以重构为实用程序类。
【讨论】:
我可以假设您可以观察到的继承只是重构的结果。
【讨论】: