//例子1

class Bird{

protect function fly(){

}

}

//翠鸟

class KingFisher extends Bird{

}

//鸵鸟

class Ostrich extends Bird{

//鸵鸟不会飞啊

}

//例子2

class A{

protect function add($a, $b){

return $a + $b;

}

}

//重载

class B extends A{

protected function add($a, $b){

return $a + $b + 100;

}

}

?>

里氏替换原则是对类继承的一种约束。对里氏替换原则有两种理解:

不能随便去继承不合适的,有多余方法或者属性的类。(例子1)

子类可以扩展父类的功能,但不能改变父类原有的功能。(例子2)

看了第二个例子,有人会说那岂不是和重载矛盾了。初看是有点,但仔细理解,并不矛盾,我们可以这样处理矛盾:

//例子2

class A{

protect function add($a, $b){

return $a + $b;

}

}

//重载

class B extends A{

protected function add($a, $b, $c){

return isset($c) ? $a + $b + 100 : $a + $b;

}

}

里氏替换原则包含一下几个隐藏含义:

子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。

子类中可以增加自己特有的方法。

当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。

当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

python里氏替换原则_php设计模式的六大原则(三):里氏替换原则相关推荐

  1. python设计模式六大原则_php设计模式的六大原则(六):迪米特法则

    class Teacher { //老师对学生发布命令,清一下女生 public function commond(GroupLeader $groupLeader){ //初始化女生 for($i= ...

  2. 设计模式六大原则_设计模式—设计六大原则

    1. 单一职责原则(SRP) 定义:就一个类而言,应该仅有一个引起它变化的原因. 从这句定义我们很难理解它的含义,通俗讲就是我们不要让一个类承担过多的职责.如果一个类承担的职责过多,就等于把这些职责耦 ...

  3. php网站系统设计的原则,php设计模式的六大原则(一):单一职责原则

    //单一职责原则 class Modem{ public function dial(){ return "dialing...."; } public function hang ...

  4. php替换图片_php实现图片上传并进行替换操作

    首先建立两个文件: change.html 和 change.php change.html 文件的表单代码如下: change file example. 文件: 这里有几个要注意的地方,首先看这句 ...

  5. python里氏替换原则_设计模式六大原则之里氏替换原则

    这是设计模式6 大原则系列的第二篇文章,附上前一篇文章地址:设计模式六大原则之单一职责原则.本文主要讲解设计模式的里氏替换原则. 肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑.其 ...

  6. 「设计模式」六大原则之三:里氏替换原则小结

    文章目录 1.里式替换原则定义 2. 举例说明 示例1: 示例2: 3. 哪些代码明显违背了 LSP? 子类违背父类声明要实现的功能 子类违背父类对输入.输出.异常的约定 子类违背父类注释中所罗列的任 ...

  7. Python、设计原则和设计模式-创建类设计模式

    Python.设计原则和设计模式 前言 程序的目标:高内聚 低耦合 有哪些设计原则 设计原则是「高内聚.低耦合」的具体落地. 单一职责原则要求在软件系统开发.设计中,一个类只负责一个功能领域的相关职责 ...

  8. IOS设计模式的六大设计原则之开放-关闭原则(OCP,Open-Close Principle)

    定义 一个软件实体(如类.模块.函数)应当对扩展开放,对修改关闭. 定义解读 在项目开发的时候,都不能指望需求是确定不变化的,大部分情况下,需求是变化的.那么如何应对需求变化的情况?这就是开放-关闭原 ...

  9. 接口隔离原则_设计模式六大原则

    作者:VieLei 原文:https://blog.csdn.net/s10461/article/details/53941097 在android中我们常提起的设计模式大约有23种,利用好设计模式 ...

最新文章

  1. keras 的 example 文件 mnist_sklearn_wrapper.py 解析
  2. Win2003远程桌面报错:RPC错误 解决办法
  3. mysql事务日志备份_事务日志备份 (SQL Server)
  4. oracle group by 取最新的一条_大国智能制造全文免费阅读_大国智能制造最新章节_乌溪小道的小说...
  5. 跨平台的网络通信中间件:ICE和ACE
  6. 华为机试HJ50:四则运算
  7. Mac只能读取不能修改硬盘文件怎么办?
  8. 云星数据VP楼炜:CMP是混合云、多云管理的必然选择
  9. java map格式化_字符串模板格式化输出map 值
  10. 小程序源码:全新外卖侠cps5.6全套微信小程序源码下载(内附加2.7.5版本微擎)支持多种CPS收益和流量主收益
  11. {windows}之向 暴风一号(病毒) 学习一个注册表小知识
  12. ARM指令集--相关指令的功能
  13. 参加第四届高校程序设计大赛-团体程序设计天梯赛心得
  14. Excel 宏编程的常用代码
  15. 大数据学习教程之java SE 教程
  16. 从易经看程序员的职业人生:乾卦--天行健,君子以自强不息
  17. VC++ MFC资源中添加PNG,JPG等图片资源
  18. x98安卓和linux启动,X98 3G安装32位UBUNTU15.10的方法
  19. SEO专业培训教程:网站title与meta中7个标点符号的正确使用
  20. 使用logisticregression回归算法训练部分,全部样本 预测良/恶性肿瘤

热门文章

  1. php web server setup,PHP本地开发利器:内置Web Server
  2. python提取日志内容_Python正则提取日志内容
  3. 利用python进行数据分析微盘_谁有有《利用Python进行数据分析》pdf 谢谢
  4. python:threading.Thread类的使用详解
  5. 剑指offer面试题[9-3]-矩形覆盖
  6. pycharm的terminal无法识别到命令 pytest 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  7. libsvm3.22——在matlab(32位和64位)中的安装
  8. 计算机组装与维修技能大赛视频,2013年计算机组装与维修技能大赛试题及答案真题...
  9. php 去除 bom,PHP批量检测并去除文件BOM头信息代码参考
  10. 判断包含字符当中包含小数点_Python|提取包含指定文本的行到一个文本文件(字符串或正则)...