zoukankan      html  css  js  c++  java
  • 里氏替换原则

    官方定义

    里氏替换原则(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
  • 相关阅读:
    idea打开了多个项目,多idea窗口相互切换的快捷键
    idea中的springboot项目如何不用重新编译,自动热部署
    线程基本使用--Thread内部方法调用start
    java如何快速创建List
    抓包工具Charles使用
    postman添加Cookie
    Ubuntu使用记录
    Intellij idea使用总结
    navicat 生成注册码( 仅供学习使用 )
    前端常用技术总结
  • 原文地址:https://www.cnblogs.com/stu-jyj3621/p/14668742.html
Copyright © 2011-2022 走看看