名称:里氏替换原则(Liskov Substitution Principle)LSP

核心:在任何父类出现的地方都可用它的子类替代。换言之:子类型必须能够替换掉他们的父类型。

例子:例如我们设计一个OldCarpenter类:

public class OldCarpenter{

public void MakeFurniture(){

System.out.println("做出一把椅子!");

}

使用YoungCarpenter继承OldCarpenter类:

public class YoungCarpenter extends OldCarpenter{

//覆盖父类的方法

@Override

public void MakeFurniture(){

System.out.println("徒弟做出一把椅子!");

System.out.println("将椅子进行装饰!");

}

客户端测试代码:

public static void main(String[] args){

OldCarpenter carpenter = new OldCarpenter();

System.out.println("原来找老木匠做椅子");

carpenter.MakeFurniture();

System.out.println("后来老木匠让徒弟代做");

carpenter = new YoungCarpenter();

carpenter.MakeFurniture();

}

运行结果很明显:在这个过程中,小木匠替代了老木匠的座椅子,对顾客是没有影响的。

总结:上边的YoungCarpenter类的对象完全可以替代OldCarpenter,只有在子类可以完全替代父类是,父类才是真正得到了复用。子类可以在父类的基础上添加新的行为。在面向对象的编程中,继承是抽象化的具体实现。

优点:里氏替换原则,舍得使用父类模块无需修改,通过使用不同的子类实现不同的扩展,是对实现抽象化的具体步骤的规范。

后记:面向对象编程中,同一个继承体系中的对象应该具有共同的行为特征,对代码的重用从抽象转焕成实现。

转载于:https://www.cnblogs.com/guochaoxxl/p/6823171.html

面向对象编程的思想(2)相关推荐

  1. 从面向过程到面向对象编程的思想转变

    项目的需求,要实现一个功能:更新表中若干行的部分列数据.Are you 明白大概要实现什么功能了吗? 嗯,我知道你明白了.那就接着往下看把. 遇到这样的问题,我相信很多人首先想到的方法是直接使用upd ...

  2. java面向对象编程的思想_java面向对象编程思想

    Java与面向对象 一.类与对象 (1)对象是Java程序的核心,对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体 (2)类是用来创建同一类型的对象的"模板",在一个类 ...

  3. python面向对象编程的思想0727

    l 面向对象编程思想 面向对象的编程核心是对象,在理解对象为何物时,必须把自己当作上帝,因为在上帝眼中世间存在的万物皆为对象,不存在的也可以创造出来.对象是特征和技能的结合,其中特征和技能分别对应对象 ...

  4. java面向对象编程的思想_java面向对象编程思想的理解

    1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...

  5. 面向对象编程基本思想

    面向对象编程的数据封装的思想:在类中,把每一个实例的属性封装起来,不同的实例拥有相同的数据类型,但是拥有不同的属性 相关知识点:面试之C/C++.Java与Python的区别 大家加油! 学习链接:h ...

  6. delphi开发日志——基窗体,使用面向对象编程的编程思想创建基类

    delphi的VCL就是面向对象的,因此我无论我们是使用她来开发数据库的管理信息系统,还是网络应用,都可以说是面向对象,虽然可能很多人都像我当初一样,不知道什么时面向对象,如何使用面向对象来编程.在这 ...

  7. 面向对象编程思想及入门知识

    这几天在调程序,所以想写写自己对"面向对象编程"的一些理解,希望对打算入门计算机编程的同志们有所帮助.之前,好几个师弟问过我,C++与C有什么区别,学习面向对象语言需要掌握哪些基础 ...

  8. 我问占小狼到底什么是面向对象编程?他转头就走。

    你好,我是 yes. 面向对象编程想必大家都耳熟能详,但是写了这么多代码你对面向对象有清晰的认识吗? 来看看这几个问题: 到底什么是面向对象编程? 和面向过程编程有什么区别? 什么又称为面向对象语言. ...

  9. 面对对象课程设计报告java,面向对象编程 JAVA编程综合实验报告.doc

    PAGE \* MERGEFORMAT 20 成绩: JAVA编程B综合实验报告 实验名称:面向对象编程 实验时间:2012年 5月 31日星期四 JAVA编程B综合实验报告 一.实验名称 面向对象编 ...

最新文章

  1. 【云安全与同态加密_调研分析(3)】国内云安全组织及标准——By Me
  2. java jvm对象_【Java】JVM
  3. 问题 A: 深度学习
  4. php a文件怎么继承b文件的类,php 如何将存在a文件中图片移到b文件中
  5. python中使用selenium模块登录QQ邮箱
  6. android开发:Android 中自定义属性(attr.xml,TypedArray)的使用
  7. 【java学习之路】(java SE篇)(讨论与思考)异常中的try,catch,return的相关问题
  8. 数据结构算法实践-Python——序章
  9. ubuntu 14.04/14.10 iptables 防火墙设置
  10. pane Java_ToolPane.java
  11. linux下无线网卡的ioctl 接口
  12. win10修改计算机密码,教你如何更改win10系统电脑密码
  13. 导师如何“温柔”地督促参加学术活动的研究生
  14. 【Matlab系列】惩罚函数法(内点法、外点法)求解约束优化问题最优值 matlab
  15. python新闻标题分类_机器学习也会“标题党”?这个算法能根据标题判断新闻类别...
  16. Win10桌面一刷新就卡死
  17. 云计算架构自己的理解
  18. 主流杀毒软件引擎分析
  19. ubuntu1704下安装wineQQ
  20. 【小技能】电脑校园网可以登录QQ但不能打开网页解决方法(4种解决方法)

热门文章

  1. Java IO流总结(zz)
  2. python multi_python – 堆叠MultiIndex的所有级别
  3. apache使用.htaccess删除.html扩展名_Web前端入门:html元素解析
  4. 12面魔方公式图解法_【高级篇】(三)三阶魔方CFOP高级玩法之——F2L
  5. android ios 上传图片到服务器,.net 接收ios, android的上传图片
  6. linux 内核阻塞,linux内核阻塞IO
  7. 11.QT事件机制源码时序分析(下)
  8. 小米5x_除了一亿像素,对于小米CC9pro可能你还要了解这些
  9. rabbitmq实战:高效部署分布式消息队列_一文看懂消息队列中间件--AMQ及部署介绍...
  10. Oracle 10G DataGuard搭建