里氏替换原则
官方定义
里氏替换原则(Liskov Substitution Principle)是1988年,麻省理工学院一位姓里的女士提出的
如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型
所有引用基类的地方必须能透明地使用其子类的对象
基本介绍
里氏替换原则通俗的来讲:子类可以扩展父类的功能,但是子类不能修改父类原有的功能
里氏替换原则就是给继承性的使用制定规范
聊聊继承性
- 提高代码的复用性
- 提高代码的可扩展性
聊聊劣势
- 继承是侵入性的(只要继承,就必须拥有父类的属性和方法)
- 继承机制很大的增加了耦合性
继承是一把双刃剑 ---> 如何正确合理使用继承
package LiskovSubstitutionPrinciple;
import jdk.swing.interop.SwingInterOpUtils;
public class LiskovDemo {
public static void main(String[] args) {
int result = new Calculator().add(3, 5);
System.out.println(result);
int mul = new SuperCalculator().mul(3, 5);
System.out.println("两数相加之和与100求差的值为" + mul);
}
}
//创建一个更加基础的基类
class base {
//Todo...
}
class Calculator extends base {
public int add(int a, int b) {
return a + b;
}
public int sub(int a, int b) {
return a - b;
}
}
class SuperCalculator extends base {
//变为依赖关系
private Calculator calculator = new Calculator();
public int add(int a, int b) {
return a + b + 5;
}
public int mul(int a, int b) {
int count = calculator.add(a, b);
return 100 - count;
}
}
注意事项:
- 子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法
- 子类中可以扩展自己的方法
- 里氏替换原则并非让我们尽量避免使用继承
- 里氏替换原则是实现开闭原则的重要方式之一
转载请注明出处:https://www.cnblogs.com/stu-jyj3621