里氏替换原则
来源:互联网 发布:微信淘宝链接转化 编辑:程序博客网 时间:2024/04/29 23:14
里氏替换原则
概念定义
里氏代换原则(Liskov Substitution Principle):所有引用基类的地方必须能透明地使用其子类的对象。
问题来源
有一功能P1,由类A完成。现需要将功能P1进行扩展,扩展后的功能为P,其中P由原有功能P1与新功能P2组成。新功能P由类A的子类B来完成,则子类B在完成新功能P2的同时,有可能会导致原有功能P1发生故障。
解决方案
当使用继承时,遵循里氏替换原则。类B继承类A时,除添加新的方法完成新增功能P2外,尽量不要重写父类A的方法,也尽量不要重载父类A的方法。里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。
实例
Rectangle.java
package com.morris.pattern.lsp;public class Rectangle { protected int width; protected int height; public Rectangle(int width, int height) { this.width = width; this.height = height; } public int calcArea() { return width * height; }}
Square.java
package com.morris.pattern.lsp;public class Square extends Rectangle { public Square(int width, int height) { super(width, height); } @Override public int calcArea() { return width * width; }}
App.java
package com.morris.pattern.lsp;public class App { public static void main(String[] args) { Rectangle rectangle = new Rectangle(10, 20); //Rectangle rectangle = new Square(10, 20); System.out.println(rectangle.calcArea()); }}
如果把长方形类Rectangle替换为正方形类Square,那么求出的面积就不正确了,原因是继承的时候重写了父类的getArea方法。这是违背里氏替换原则的。
总结
尽量不要重写父类方法,而是增加自己特有的方法。
继承给程序设计带来巨大便利的同时,也带来了弊端。如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能会产生BUG。
覆盖或实现父类的方法时输入参数可以被放大。
覆写或实现父类的方法时输出结果可以被缩小。
0 0
- 里氏替换原则
- LSP(里氏替换原则)
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- 里氏替换原则
- c++详解【new和delete】
- CFE文件内嵌bmp图像并显示
- 排序算法之归并排序
- Android进程保活招式大全
- Jenkins 配置邮件通知
- 里氏替换原则
- [LeetCode]Subsets
- 算法学习笔记之均值滤波法
- 设置EditText设置为两位小数,或者其他位数
- python虚拟环境搭建
- WebAPI 用ExceptionFilterAttribute实现错误(异常)日志
- 操作系统与网络实现 之一(丙)
- Codeforces 365Div2 D Mishka and Interesting sum
- 一天一条Linux指令-cp