文档章节

设计原则-里氏代换原则

hell03W
 hell03W
发布于 2016/11/10 15:07
字数 486
阅读 28
收藏 0

里氏代换原则: 所有引用基类(父类)的地方, 必须能透明地使用其子类的对象.

里氏代换原则告诉我们, 在软件系统中, 将一个基类对象替换成它的子类对象, 程序将不会产生任何错误和异常, 反过来则不成立, 如果一个软件实体使用的是一个子类对象的话, 那么它一定能够使用基类对象.

使用里氏代换原则需要注意的问题:

  1. 子类的所有方法必须在父类中声明, 或子类必须实现父类中声明的所有方法. 根据里氏代换原则, 为了保证系统的扩展性, 在程序中通常使用父类来定义, 如果一个方法只存在于子类中, 在父类中不提供相应的声明, 则无法在以父类定义的对象中使用该方法.
  2. 我们在运用里氏代换原则时, 尽量把父类设计成抽象类或者接口, 让子类继承父类或者实现接口, ,并实现在父类中声明的方法, 运行时, 子类实例替换父类实例, 我们可以很方便的扩展系统功能, 同时无需修改原有子类的代码, 增加新的功能可以通过增加一个新的子类来实现. 里氏代换原则是开闭原则的具体实现手段之一.

里氏代换原则是开闭原则的具体实现手段之一.

废话那么多, 说白了里氏代换原则就是多肽嘛, 搞懂了多肽的性质就搞懂了里氏代换原则. 我觉得开发中的多肽就是里氏代换原则的例子, 一模一样, 完全符合.

原文在这里, 这里写的更加详细.

Reference: http://blog.csdn.net/lovelion/article/details/7540445

本文转载自:http://blog.csdn.net/lovelion/article/details/7540445

hell03W
粉丝 9
博文 145
码字总数 109892
作品 0
朝阳
程序员
私信 提问
Java开发中的23种设计模式详解

1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩...

大灰狼wow
2014/05/04
0
1
设计模式的6大原则:也是编程者编程时应该追求和遵循的

1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩...

十月阳光
2015/10/28
0
0
java设计模式基础

设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式...

Z-向上
2018/01/11
0
0
设计模式之基础知识

设计模式简介 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式...

白志华
2015/10/20
64
0
java设计模式

一、设计模式的分类 总体来说设计模式分为三大类: 1.创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式,共七种:适配器模式、装饰器模式、...

HaleyLiu
2017/09/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习threeJS(三)--光源

一、光源的类型 AmbientLight(环境光) PointLight(点光源) SpotLight(聚光灯光源,锥形光源) DirectionLight(方向光,太阳光,平行光) HemisphereLight(半球光) AreaLight(面光源) LensFlare...

25903014
33分钟前
1
0
Graphx处理janusGraph数据实现

声明: 此方案是在spark直接执行gremlinSQL方案实现受阻的情况下的备选方案,不涉及工作机密,不存在泄密可能,纯属个人思考,希望抛砖引玉 方案: 将gremlinSql的查询结果转化为startGraph,...

仔仔1993
45分钟前
1
0
mysql 查询语句执行顺序

(8)SELECT (9) DISTINCT <select_list> (1) FROM <left_table> (3)<join_type>JOIN<right_table> (2) ON<join_condition> (4) WHERE <where_condition> (5) GROUP BY <group_by_list> (6)......

kuchawyz
49分钟前
3
0
scala中_、:_*的含义

##scala中的几种简写##参考资料:##https://blog.csdn.net/qq_38314823/article/details/81038200##https://www.cnblogs.com/harvey888/p/6246471.html val mylist =List(1,2,3,4,5)"_......

KYO4321
52分钟前
2
0
【更新】FastReport.Net v2019.3发布,添加数字签名|附下载

FastReport.Net是适用于Windows Forms,ASP.NET,MVC和.NET Core的全功能报表解决方案。 它可以在Microsoft Visual Studio 2005-2017中使用。 支持.Net Framework 2.0-4.x,.NET Core 2.0。 ...

xiaochuachua
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部