自行车类继承结构的优化与实现
1. 问题引入
在编程实践中,我们常常会遇到一些类结构设计不合理的情况。以自行车类为例,最初设计了一个 Bicycle
类,但随着需求的变化,出现了 MountainBike
类,此时问题就逐渐显现出来。
MountainBike
实例包含了公路自行车和山地自行车行为的混乱混合。这是因为 Bicycle
类是一个具体类,它将所有自行车通用的行为与公路自行车特有的行为结合在一起。当把 MountainBike
作为 Bicycle
的子类时,它会继承所有这些行为,无论这些行为是否适用。
1.1 类命名带来的问题
最初,设计一个通用的 Bicycle
类是合理的,因为当时可能只有公路自行车这一种类型。但当 MountainBike
出现后, Bicycle
这个名字就产生了误导。这两个类名暗示了继承关系,我们自然会将 MountainBike
作为 Bicycle
的子类来编写代码,但 Bicycle
类中的代码现在已经不适用了。
继承需要满足两个条件:
- 所建模的对象必须真正具有泛化 - 特化关系。
- 必须使用正确的编码技术。
目前 Bicycle
类将通用自行车代码与特定公路自行车