里氏替换原则

官方定义

里氏替换原则(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
原文地址:https://www.cnblogs.com/stu-jyj3621/p/14668742.html