里氏替换原则 Liskou Substitution

发布时间 2023-12-21 08:54:44作者: 梅丹隆

开闭原则 OpenClose的补充
对抽象化的规范

一、定义

如果对每一个类行为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有放生变化,那么类型T2是类型T1的子类型

1、定义扩展

  1. 一个软件实体如果适用一个父类的话,那一定适用于其子类
  2. 所有引用父类的地方必须能够透明地使用子类的对象,子类对象能够替换父类对象,而程序逻辑不变

2、引申含义

子类可以扩展父类的功能,但不能改变父类原有的功能

  1. 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法
  2. 子类中可以添加自己特有的方法
  3. 当子类的方法重载父类的方法时,方法的前置条件(即方法的输入/入参)要比父类方法的输入参数更宽松
    1. 如父类入参为HashMap,那么子类入参应为Map
  4. 当子类的方法实现父类的方法时(重写/重载或实现抽象方法),方法的后置条件(即方法的输出/返回值)要比父类更严格或相等
    1. 如父类的返回值为Map,那么子类的返回值可以是HashMap

二、优点

  1. 约束继承泛滥,开闭原则 OpenClose的一种体现
  2. 加强程序的健壮性,同时变更时也可以做到非常好的兼容性
  3. 提高程序的可维护性和扩展性
  4. 降低需求变更时引入的风险