飞客 - LSP
type: channel
link: https://achmydream.com/tag/LSP/
items: 5.1. 里氏替换原则

5.1. 里氏替换原则
type: item
date: 2025-10-04T11:42:04+08:00
description: 解释子类型必须完全替代掉它的父类型任何基类出现的地方，子类一定可以出现修改了基类，不会对子类造成影响，基类能真正的被复用一个软件实体的如果使用一个父类的话，那么一定适用于它的子类，而且它察觉不出父类对象与子类对象的区别继承的优点代码共享，减少类的创建代码量，子类能拥有父类的属性和方法提升了代码重用性子类可拥有父类的功能，又有父类不同的功能继承的缺点继承的侵入性，继承父类必须完全继承父类的方法和属性降低代码灵活性，子类因继承父类会受到一些限制增强了耦合性，更改父类的代码功能，可能会影响到子类，在缺乏规范的情况下，可能需要大面积重构代码违背里氏替换原则在调用其他类时务必使用父类或接口，如果不能使用父类或接口，说明类的设计违背了LSP原则子类不能完全实现父类的方法（比如企鹅不应该继承鸟类，因为企鹅不会飞而鸟类会飞），或者父类的某些方法在子类中发生了“畸变”，建议断开继承关系，采用依赖、聚集、组合的方式替代继承里氏替换原则使用规范子类可以扩展父类的功能，但不能改变父类原有的功能（不能重写或覆盖父类的非抽象（已实现）方法）子类可添加自己特有的方法子类在覆写或实现父类方法时，输入参数的范围可被扩大子类在覆写或实现父类方法时，输出参数的范围可被缩小