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