里氏替换原则是面对象设计的基本原则之一。根据里氏替换原则,子类必须出现在任何基类可以出现的地方。LSP是继承和服用的基石。只有当衍生物可以替换基本类别,软件单位的功能不受影响时,基本类别才能真正重用,衍生物也可以在基本类别的基础上添加新的行为。里氏替换原则是对“开闭”原则的补充。实现“开闭”原则的关键步骤是抽象化。基类与子类的继承关系是抽象化的具体实现,因此里氏替换原则是实现抽象化的具体步骤的标准。
一般来说,子类可以扩展父类的功能,但不能改变父类的原始功能。
它包含以下四层含义:
子类可以实现父类抽象方法,但不能覆盖父类非抽象方法。
可以在子类中添加自己独特的方法。
当子类方法重载父类方法时,方法的前提条件(即方法的形参)比父类方法的输入参数更宽松。
当子类方法实现父类抽象方法时,方法的后置条件(即方法的返回值)比父类更严格。
