Liskov替换原则的内容是:If S is a subtype of T, then objects of type T may be replaced with objects of type S, without breaking the program。主要讲的是应该如何设计子类,LSP的关注点让人把注意力放到父类上。关心子类是一种实现继承的表现,而实现继承是我们要努力摒弃的,接口继承才是我们的努力方向,而做好接口继承,会更符合 LSP。
LSP有一种更容易理解的方式就是Design By Contract,可以从两个角度来理解:
1)子类在设计的时候,要遵守父类的行为约定(或者叫协议)
2)父类定义了函数的行为约定,那子类可以改变函数的内部实现逻辑,但不能改变函数原有的行为约定
常见的违反LSP的情况主要有:
1)子类违背父类声明要实现的功能
2)子类违背父类对输入、输出、异常的约定
3)子类违背父类注释中所罗列的任何特殊说明
此文章为3月Day3学习笔记,内容来源于极客时间《设计模式之美》