通俗的定义:子类可以扩展父类的功能,但不能改变父类原有的功能。

覆盖或实现父类方法时可以放大输入参数

在一个继承中,如果子类传入的参数小于或等于父类参数时,那么此方法在执行时,会永远调用父类的方法,而不会调用子类中的方法,因为这是重载,父类中的方法还存在,没有被替换掉。

如果大于父类传入参数,会使得我们想要执行子类方法时,传入一个较大的参数来进行调用,这样既不会破坏继承性,也能保证程序良好的运行。如下图例子

public class Father{
public Collection doSomething(HashMap map) {System.out.println("父类被执行...");return map.values();}
}
// 子类
public class Son extends Father {// 子类放大了输入参数类型public Collection doSomething(Map map) {System.out.println("子类被执行...");return map.values();}
}

  

public class Client {public static void main(String[] args) {Son s=new Son();HashMap map = new HashMap();//传入这个参数,调用的是父类中的方法Map map=new Map();//传入这个参数,调用的是子类中的方法f.doSomething(map);}
}

  

覆写或者实现父类方法时可以缩小输出结果

里氏替换原则要求,子类中方法的返回值类型必须小于或者等于被重写的父类抽象方法的返回值类型:

public abstract class Computer {public abstract void use();
}class IBM extends Computer{@Overridepublic void use() {System.out.println("use IBM Computer.");}
}class HP extends Computer{@Overridepublic void use() {System.out.println("use HP Computer.");}
}

 这样的话,会使的业务逻辑更加的具体。

里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义:

  • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
  • 子类中可以增加自己特有的方法。
  • 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
  • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

转载于:https://www.cnblogs.com/callyblog/p/7521894.html

设计原则 里氏替换原则相关推荐

  1. 设计模式原则—里氏替换原则

    设计模式概念与作用: 设计模式是一套被反复使用的.多数人知晓.经过分类编目的优秀代码设计经验的总结.特定环境下特定问题的处理方法. 1)重用设计和代码 重用设计比重用代码更有意义,自动带来代码重用 2 ...

  2. 软件设计的七大原则 --开闭原则 里氏替换原则 依赖倒置原则

    在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 这 7 种设计原则是软件设计 ...

  3. 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)

    设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...

  4. 设计原则——里氏替换原则

    1.全称 liskov substitution principle 缩写为:LSP 2.解释 继承必须确保超类所拥有的性质在子类中仍然成立 里氏替换原则主要阐述了有关继承的一些原则,也就是什么时候应 ...

  5. Java设计原则——里氏替换原则

    我们一定要给自己提出这样的任务:第一,学习,第二是学习,第三还是学习. 学习从来无捷径,循序渐进登高峰. 目录 一.基本介绍 二.应用实例 1.示例一 2.示例二 部分笔记来源于尚硅谷设计模式视频教学 ...

  6. 软件架构设计原则--里氏替换原则

    本专栏内容参考自:咕泡学院Tom老师的<Spring5核心原理与30个类手写实战>,仅作个人学习记录使用,如有侵权,联系速删   里氏替换原则(Liskov Substitution Pr ...

  7. 【设计模式】软件设计七大原则 ( 里氏替换原则 | 定义 | 定义扩展 | 引申 | 意义 | 优点 )

    文章目录 一.里氏替换原则定义 二.里氏替换原则定义扩展 三.里氏替换原则引申意义 四.里氏替换原则意义 五.里氏替换原则优点 一.里氏替换原则定义 里氏替换原则定义 : 如果 对每一个 类型为 T1 ...

  8. 软件架构设计原则-里氏替换原则

    前言 里氏替换原则简单的理解可以是父类用到的地方可以用子类替换并且不改变逻辑,这就要求子类可以扩展父类的功能,但不能改变父类原有的功能.里氏替换原则要求 (1) 子类可以实现父类的抽象方法,但不能覆盖 ...

  9. 设计模式之七大原则——里氏替换原则(LSP)(三)

    里氏替换原则(Liskov Substitution Principel)是解决继承带来的问题. 4 里氏代换原则(Liskov Substitution Principle, LSP) 4.1 什么 ...

  10. 设计模式六大原则:里氏替换原则(五)

    转载请标明:http://blog.csdn.net/liulongling/article/details/51383159 面向对象其它六大原则 单一职责原则-带你走梦幻西游(一) 依赖倒置原则( ...

最新文章

  1. ubuntu18.04 -- 创建第一个Django项目
  2. 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
  3. ES6新特性之函数优化-参数默认值
  4. 高端ERP软件市场漫谈:崇洋无罪 自重有理
  5. SAP Spartacus PageLayoutComponent 如何知道自己应该显示哪些具体内容
  6. 图形用户界面和交互输入方法---图形数据的输入功能
  7. 错误: -source 1.6 中不支持 diamond 运算符
  8. 【优化预测】基于matlab粒子群算法优化DBN预测【含Matlab源码 1420期】
  9. 又读《孙子兵法》,谈领导力
  10. 阿里云建站百度收录吗?
  11. 笔记本计算机屏幕亮度暗,笔记本屏幕100%还是暗,win10电脑亮度调节失灵
  12. 安装CUDA时报错packages have unmet dependencies的一个可能原因
  13. jieba分词库、WordCloud词云库、requests库
  14. linux重启搜狗输入法命令
  15. 【js】vue项目中实现点击复制过滤条件,获取并处理粘贴板内容
  16. 2021年知到网课《艾滋病性与健康》第一单元考试答案
  17. 2011最牛高考作文:时间在流逝——上还是不上大学?
  18. android中usb if验证(carplay)
  19. 【Java案例】模拟物流快递系统程序设计
  20. 数学天才用5万字让你读懂:微积分!

热门文章

  1. 动图妙解高内聚与低耦合,觉得让你秒懂
  2. 历数2017年五大Linux痛点,哪个戳到了你?
  3. 不是生活所迫,谁特么想努力!
  4. 博客开张,小小的庆下生^_^
  5. Python-1-基础
  6. 关于QT中的音频通信问题
  7. woff字体找不到导致的404错误
  8. Oracle Siebel CRM技术的前景
  9. bae3.0第三步 添加默认管理后台模块和mysql库
  10. 05-不借用第三个变量实现两个变量值互换(运算符)