定义

任何基类可以出现的地方,子类一定可以出现。

里氏替换原则是继承复用的基石,只有当子类可以替换掉基类且软件单位的功能不受到影响的时候,基类才能真正被复用,而子类也能够在基类的基础上去增加新的行为。

继承的优缺点

优点

  1. 约束继承泛滥(开闭原则的一种体现)
  2. 加强程序健壮性,在程序变更的同时可以做到良好的兼容性
  3. 提高代码的重用性
  4. 提高代码的可扩展性

缺点

  1. 继承是侵入性的。只要继承,就必须拥有父类的所有属性和方法
  2. 降低了代码的灵活性
  3. 增强了耦合性。当父类的常量、变量或者方法被修改时,必需要考虑子类的修改,而且在缺乏规范的环境下,这种修改可能带来非常糟糕的结果——大片的代码需要重构

里氏替换原则反应了基类与子类之间的关系,同时也是对开闭原则的补充以及对实现抽象化的具体步骤的规范。

定义规范

里氏替换原则为良好的继承定义了一个规范:

  1. 子类可以实现父类的方法
  2. 子类可以增加自己特有的方法
  3. 覆盖或者实现父类的方法时入参可以被放大
  4. 覆盖或者实现父类的方法时输出结果可以被缩小

如果程序违背了里氏替换原则,则继承类的对象在基类出现的地方会出现运行错误。这时其修正方法是:取消原来的继承关系,重新设计它们之间的关系(可以采用依赖、聚集、组合等关系)。