里氏替换原则

定义

所有引用基类的地方必须能透明地使用其子类的对象。(子类可以替换父类)

use pointers or references to base classes must be able to use objects of derived classes without knowing it.

通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任 何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不 行了,有子类出现的地方,父类未必就能适应。

含义

  1. 子类必须完全实现父类的方法
  2. 子类可以有自己的个性
  3. 覆盖或实现父类的方法时输入参数可以被放大。如果父类的输入参数类型大于子类的输入参数类型,会出现父类存在的地方,子类未必会存在,因为一旦把子类作为参数传入,调用者很可能进入子类的方法范畴。
  4. 覆写或实现父类的方法时输出结果可以被缩小 父类的一个方法的返回值是一个类型 T,子类的相同方法(重载或覆写)的返
    回值为 S,那么里氏替换原则就要求 S 必须小于等于 T,也就是说,要么 S 和 T 是同一个类型,要么 S 是 T 的子类。

优缺点

优点

  1. 提高代码的重用性,子类拥有父类的方法和属性;
  2. 提高代码的可扩展性,子类可形似于父类,但异于父类,保留自我的特性

缺点

  1. 继承是侵入性的,只要继承就必须拥有父类的所有方法和属性,在一定程度上约束了子类,降低了代码的灵活性;
  2. 增加了耦合,当父类的常量、变量或者方法被修改了,需要考虑子类的修改,所以一旦父类有了变动,很可能会造成非常糟糕的结果,要重构大量的代码。

文章作者: 凌云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 凌云 !
  目录