里氏替换原则(LSP),The Liskov Substitution Principle
定义
所有引用基类的地方必须能透明地引用其子类的对象,即子类可以拓展父类的功能,但不能修改父类已有的功能。
也就是说在父类出现的地方子类也可以出现,并且替换为子类也不会报错,引用者根本不需要知道引用的是父类还是子类,但是反过来就行不通了,子类出现的地方父类就不一定能出现并代替子类。
里氏替换原则的特点:
1、子类可以拓展父类的功能,但不能修改父类已有的功能,如果修改了父类已有的功能,可能导致父类定义的功能在子类覆盖后不适用。
2、重载父类的方法时,子类的方法形参应该比父类更宽松。
3、实现父类的抽象方法时,子类的方法输出结果应该比父类更加严格。
4、子类可以有自己独特的私有方法,但是需要注意的是,如果子类不能完全实现父类的方法,或者父类的某一些方法在子类中已经不适用,这种情况则建议断开父子关系,使用组合等方式代替继承出现。
里氏替换原则的优缺点:
1、合理得用类的继承关系,提高了代码的复用性,但也增强了类与类之间的耦合性。
2、通过建立抽象,运行过程中具体实现取代抽象,保证了系统的可拓展性。
3、只要继承父类就拥有父类的全部属性和方法,这样减少了代码重复创建量共享了代码但也约束了子类的行为,降低了系统灵活性。
我们平时开发中可能没考虑这么多,乱覆盖父类的方法,没有多少联系的继承等很多打破了里氏替换的原则,这样不顾后果的后果就是我们写的程序存在着潜在的漏洞,而且出问题的机率也会显著提升。
代码及所有资源请加java群274435854下载,一起学习交流。
架构之路,头条精选,每天一篇干货,喜欢就收藏+关注吧!
本文来自作者:运维笔记ywbj,不代表小新网立场!
转载请注明:https://www.xiaoxinys.cn/456187.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。