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
  • 相关阅读:
    安卓 广播机制
    安卓 活动的启动模式
    安卓 生命周期
    安卓六大布局
    day4-list,列表
    Leetcode 947 移除最多的同行或同列石头
    Leetcode 628三个数的最大乘积
    Leetcode 1584连接所有点的最小费用
    Leetcode 721 账户合并
    Leetcode 103 二叉树的锯齿层序遍历
  • 原文地址:https://www.cnblogs.com/stu-jyj3621/p/14668742.html
Copyright © 2011-2022 走看看