iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java设计模式的里氏置换原则是什么
  • 262
分享到

Java设计模式的里氏置换原则是什么

2023-06-17 11:06:04 262人浏览 安东尼
摘要

这篇文章主要讲解了“Java设计模式的里氏置换原则是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java设计模式的里氏置换原则是什么”吧!里氏置换原则(Liskov Substitut

这篇文章主要讲解了“Java设计模式的里氏置换原则是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java设计模式的里氏置换原则是什么”吧!

里氏置换原则(Liskov Substitution Principle),简称LSP

定义:

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

所有引用基类的地方必须能够透明的使用其子类对象。

也就是说,只要父类出现的地方子类就能够出现,而且替换为子类不会产生任何错误或异常。但是反过来,子类出现的地方,替换为父类就可能出现问题了。

这个原则是为良好的继承定义一个规范,简单的讲,有4层含义:

一、子类必须完全实现父类的方法

定义一个抽象类

public abstract class ViewPoint {      //去丽江旅游      public abstract void where();  }

下面两个类是实现这个抽象类

public class Lijiang extends ViewPoint {         @Override     public void where() {          System.out.println("欢迎来到丽江...");      }     }   public class Zhangjiajie extends ViewPoint {         @Override     public void where() {          System.out.println("欢迎来到张家界...");      }     }

人物是涂涂,在里面设置类类型来传递参数。此时涂涂要去的旅游景点还是抽象的

public class Tutu {      //定义要旅游的景点      private ViewPoint viewpoint;      //涂涂要去的景点      public void setViewPoint(ViewPoint viewpoint)      {          this.viewpoint = viewpoint;      }             public void travelTo()      {          System.out.println("涂涂要去旅游了");          viewpoint.where();      }  }

场景类。设置具体要去的景点

public class Sence {      public static void main(String args[])      {          Tutu tutu = new Tutu();          //设置要去的旅游景点          tutu.setViewPoint(new Lijiang());          tutu.travelTo();      }  }

运行结果:

涂涂要去旅游了
欢迎来到丽江...

二、子类可以有自己的特性

也就是说在类的子类上,可以定义其他的方法或属性

三、覆盖或者实现父类的方法时输入参数可以被放大

父类能够存在的地方,子类就能存在,并且不会对运行结果有变动。反之则不行。

父类,say()里面的参数是HashMap类型,是Map类型的子类型。(因为子类的范围应该比父类大)

import java.util.Collection;  import java.util.HashMap;     public class Father {      public Collection say(HashMap map)      {          System.out.println("父类被执行...");          return map.values();      }  }

子类,say()里面的参数变成了Map类型,Map范围比HashMap类型大,符合LSP原则。注意这里的say不是覆写父类的say,因为参数类型不同。而是重载。

import java.util.Collection;  import java.util.Map;      public class Son extends Father {      //方法输入参数类型      public Collection say(Map map)      {          System.out.println("子类被执行...");          return map.values();      }  }

场景类

import java.util.HashMap;     public class Home {      public static void main(String args[])      {          invoke();      }             public static void invoke()      {          //父类存在的地方,子类就应该能够存在          //Father f = new Father();          Son s = new Son();          HashMap map = new HashMap();          //f.say(map);          s.say(map);      }  }

无论是用父类还是子类调用say方法,得到的结果都是

父类被执行...

但是,如果将上面Father里的say参数改为Map,子类Son里的say参数改为HashMap,得到的结果就变成了

f.say(map)结果:父类被执行...

s.say(map)结果: 子类被执行...

这样会造成逻辑混乱。所以子类中方法的前置条件必须与父类中被覆写的前置条件相同或者更宽。

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

其实与上面的类似,也就是父类能出现的地方子类就可以出现,而且替换为子类不会产生任何错误或者异常,使用者也无需知道是父类还是子类。但是反过来就不行了,有子类出现的地方,父类未必就适应。(毕竟子类的范围要>=父类的范围)

感谢各位的阅读,以上就是“Java设计模式的里氏置换原则是什么”的内容了,经过本文的学习后,相信大家对Java设计模式的里氏置换原则是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Java设计模式的里氏置换原则是什么

本文链接: https://www.lsjlt.com/news/288507.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java设计模式的里氏置换原则是什么
    这篇文章主要讲解了“Java设计模式的里氏置换原则是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java设计模式的里氏置换原则是什么”吧!里氏置换原则(Liskov Substitut...
    99+
    2023-06-17
  • Java设计模式之里氏替换原则精解
    1.什么是里氏替换原则? 我们都知道,在面向对象编程中有三大特性(封装、继承、多态),在这里我们来说 继承 这个东西。 继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设...
    99+
    2024-04-02
  • Java设计模式七大原则之里氏替换原则详解
    目录定义案例需求方案一方案二对比分析总结定义 里氏替换原则(Liskov Substitution Principle,LSP),官方定义如下: 如果对每一个类型为S的对象o1,都有...
    99+
    2024-04-02
  • 解析Java实现设计模式六大原则之里氏替换原则
    目录一、什么是里氏替换原则1.1、里氏替换原则定义1.2、里氏替换原则有至少有两种含义二、使用里氏替换原则的目的三、里氏替换原则与继承多态之间的关系四、里式替换的规则4.1、子类方法...
    99+
    2024-04-02
  • C#实现六大设计原则之里氏替换原则
    定义: 1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,...
    99+
    2024-04-02
  • Java设计模式六大原则是什么
    这篇文章主要讲解了“Java设计模式六大原则是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java设计模式六大原则是什么”吧!单一职责原则单一职责定义一个类只负责一个功能领域中的相应职...
    99+
    2023-06-02
  • C#面向对象设计原则之里氏替换原则
    里氏替换原则(LSP) 定义:在任何父类出现的地方都可以用它的子类类替换,且不影响功能。解释说明:其实LSP是对开闭原则的一个扩展,在OO思想中,我们知道对象是由一系列的状态和行为组...
    99+
    2024-04-02
  • java面向对象设计原则之里氏替换原则示例详解
    目录概念实现拓展概念 里氏替换原则是任何基类出现的地方,子类一定可以替换它;是建立在基于抽象、多态、继承的基础复用的基石,该原则能够保证系统具有良好的拓展性,同时实现基于多态的抽象机...
    99+
    2024-04-02
  • C++依赖倒转原则和里氏代换原则的作用是什么
    这篇“C++依赖倒转原则和里氏代换原则的作用是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++依赖倒转原则和里氏代换...
    99+
    2023-07-05
  • JS设计模式的六大原则是什么
    本篇内容主要讲解“JS设计模式的六大原则是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS设计模式的六大原则是什么”吧!单一职责原则(SRP)单一功能原则...
    99+
    2024-04-02
  • java设计模式之六大原则分别是什么
    这篇文章将为大家详细讲解有关java设计模式之六大原则分别是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统...
    99+
    2023-06-15
  • Android设计模式SOLID六大原则是什么
    本篇内容主要讲解“Android设计模式SOLID六大原则是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android设计模式SOLID六大原则是什么”吧!单一职责原则定义定义:确保单例类...
    99+
    2023-06-25
  • Java设计模式的原则有哪些
    本文小编为大家详细介绍“Java设计模式的原则有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java设计模式的原则有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。设计模式的六大原则:1、单一职责原则,...
    99+
    2023-07-04
  • java设计模式有哪些原则
    这篇文章将为大家详细讲解有关java设计模式有哪些原则,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。设计模式软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数...
    99+
    2023-06-20
  • C++依赖倒转原则和里氏代换原则有什么好处
    初学依赖倒转原则和里氏代换原则时,由于笔者水平有限,并没有看懂书上的专业术语的解释,经过反复摸索和学习,发现里氏代换原则和依赖倒转原则可以一言以蔽之: 里氏代换原则:开发时以抽象为核...
    99+
    2023-02-25
    C++依赖倒转原则 C++里氏代换原则
  • java设计模式的依赖倒置原则怎么实现
    这篇文章主要讲解了“java设计模式的依赖倒置原则怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java设计模式的依赖倒置原则怎么实现”吧!依赖倒置原则(Dependence Inv...
    99+
    2023-06-17
  • Java设计模式七大原则之依赖倒置原则详解
    目录定义案例需求方案一方案二对比分析总结定义 依赖倒转原则,又称依赖倒置原则(Dependence Inversion Principle),又称DIP原则,即:上层模块不应该依赖底...
    99+
    2024-04-02
  • C#面向对象编程中的里氏替换原则是什么
    这篇文章主要介绍“C#面向对象编程中的里氏替换原则是什么”,在日常操作中,相信很多人在C#面向对象编程中的里氏替换原则是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#面向对象编程中的里氏替换原则是什么...
    99+
    2023-07-02
  • Java中设计模式的原则有哪些
    本篇文章给大家分享的是有关Java中设计模式的原则有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java中的设计模式与7大原则:一、创建型模式抽象工厂模式(Abstrac...
    99+
    2023-05-31
    java 设计模式 ava
  • JAVA初探设计模式的六大原则
    目录前言P1.单一职责原则(Single Responsibility Principle)P2.里氏替换原则(liskov substitution principle)P3.依赖...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作