• 设计模式——里氏代换原则


    里氏代换原则

    一、OO中的继承性的思考和说明

    • 1、继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设定规范和契
      约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实
      现的方法任意修改,就会对整个继承体系造成破坏。

    • 2、继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵
      入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,
      则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子
      类的功能都有可能产生故障

    要使用好继承,就要了解里氏代换原则

    二、基本了解

    • 1、在使用继承时,遵循里氏替换原则,在子类中尽量不要重写父类的方法
    • 2、里氏替换原则告诉我们,继承实际上让两个类耦合性增强了,在适当的情况下,可
      通过聚合,组合,依赖 来解决问题
    • 3、如果对每个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序
      P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1
      的子类型。换句话说,所有引用基类的地方必须能透明地使用其子类的对象。
      .

    在这里插入图片描述

    就是当B类最好不要直接继承A类,去重写它,要再建一个更基础的类,两个都去继承,增强两个类的耦合性

    违背原则代码

    	class A{
    		// 返回两个数的差
    		public int func1(int num1,int num2){
    			return num1 - num2;
    		}
    	}
    	class B extends A{
    		// 返回两个数的和
    		public int func2(int num1,int num2){
    			return num1 + num2;
    		}
    
    		@Override
    		public int func1(int num1, int num2) {
    			return super.func1(num1, num2);
    		}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    符合原则代码:

    public class Lsdh {
    
    	// 创建一个更加基础的类
    	class Base{
    		// 把更基础的方法和成员写到Base类
    	}
    	class A extends Base{
    		// 返回两个数的差
    		public int func1(int num1,int num2){
    			return num1 - num2;
    		}
    	}
    	class B extends Base{
    		// 返回两个数的和
    		public int func2(int num1,int num2){
    			return num1 + num2;
    		}
    		// 如果B需要使用A类的方法,使用组合关系
    		private A a  = new A();
    		public int func3(int num1,int num2){
    			return a.func1(num1,num2);
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    元宇宙爆火后的投资机会|广州华锐互动
    461.汉明距离
    SCT52240STDR,SCT52240MTER,SCT52240QSTDR,SCT52240QMTER,栅极驱动器
    GB/T28181协议介绍
    按键精灵中的日志、分辨率、找色逻辑、线程
    面试题之HashMap与HashTable的区别
    44文章解读与程序——《MATLAB神经网络30个案例分析》-30个实例仿真---已提供下载资源
    如何在 Microsoft IIS 服务器中配置自定义 404 错误页面
    云行 | 让数据奔驰在“云”间,天翼云助力贵州筑牢算力底座
    页面置换算法
  • 原文地址:https://blog.csdn.net/qq_48721706/article/details/125858521