企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] # 原则 **子类必须能够替换成他们的基类** 我们应该认真的思考应用中各个类继承是否合适,派生类能否正确的重写 如果错误的用继承,会给系统的后期维护带来不少麻烦.这就需要一个设计原则上来遵循,他就是替换原则 **子类型必须能够替换掉他们的父类型,并出现在父类能够出现的任何地方. 一个软件实体如果使用一个基类的话,那么一定适合于子类,而且这根本不能察觉出基类对象和子类对象的区别,是不是和多态比较像?** # 主要是针对继承的设计原则 继承是面向对象的一个重要特性,能减少代码?如何合理使用继承,是LSP要解决的问题? ![](https://box.kancloud.cn/60be96f0dc7040da371423c74efc7e95_1313x419.png) 如果A和B违反了LSP的设计,通常做法是创建一个新的抽象类C,作为2个类的超类,将A和B的共同行为移到C中,从而解决A和B行为完全不一致的问题 php对LSP支持不太友好,缺乏向上转型的概念,只能通过一些曲折的方法实现 # 思考 LSP替换的不仅仅是功能,还包括语义.试着思考:白马可以替换马,而牛同样可以作为劳动力,可代换马否?高跟鞋也是鞋子,男人传高跟鞋又是否能接受?