里氏替换原则

定义

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

解释

在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,因此我们需要注意的是,尽量不要重载或者重写父类的方法(抽象方法除外),因为这样可能会改变父类原有的行为。

里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

使用的时候,需要注意:

  1. 子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法。根据里氏代换原则,为了保证系统的扩展性,在程序中通常使用父类来进行定义,如果一个方法只存在子类中,在父类中不提供相应的声明,则无法在以父类定义的对象中使用该方法
  2. 我们在运用里氏代换原则时,尽量把父类设计为抽象类或者接口,让子类继承父类或实现父接口,并实现在父类中声明的方法,运行时,子类实例替换父类实例,我们可以很方便地扩展系统的功能,同时无须修改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现。里氏代换原则是开闭原则的具体实现手段之一。

优点

  1. 代码共享,减少创建类的工作量,每个子类都拥有父类的所有属性和方法;
  2. 提高代码的可重用性;
  3. 提高代码的可扩张性;
  4. 提高产品或项目的开放性。
原文地址:https://www.cnblogs.com/zuofaqi/p/10244985.html