#开闭原则,继承
class Animal(object):def run(self):print('Animal is running...')
class Dog(Animal):def run(self):print('Dog is running...')
class Cat(Animal):def run(self):print('Cat is running...')
def run_twice(animal):animal.run()animal.run()
dog=Dog()
cat=Cat()
print(run_twice(dog))
print(run_twice(cat))

  

多态的好处就是,当我们需要传入DogCatTortoise……时,我们只需要接收Animal类型就可以了,因为DogCatTortoise……都是Animal类型,然后,按照Animal类型进行操作即可。由于Animal类型有run()方法,因此,传入的任意类型,只要是Animal类或者子类,就会自动调用实际类型的run()方法,这就是多态的意思:

对于一个变量,我们只需要知道它是Animal类型,无需确切地知道它的子类型,就可以放心地调用run()方法,而具体调用的run()方法是作用在AnimalDogCat还是Tortoise对象上,由运行时该对象的确切类型决定,这就是多态真正的威力:调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保run()方法编写正确,不用管原来的代码是如何调用的。这就是著名的“开闭”原则:

对扩展开放:允许新增Animal子类;

对修改封闭:不需要修改依赖Animal类型的run_twice()等函数。

转载于:https://www.cnblogs.com/zhizhiyin/p/9628927.html

编程理论:多态,继承,和开闭原则相关推荐

  1. 零基础入门 自学 JAVA SE 基础篇(九)instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface)

    JAVA SE自学 基础篇 多态 instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface) 目标 父类型与子类型之间的转换及instanceo ...

  2. C++中的开闭原则使用C++多态功能实现附源码

    开闭原则 使用开闭原则之前一个银行柜员会将所有的工作都操作一遍,这样会大大降低办事的效率,而且银行的业务不适合扩展,没扩展一项业务就要培训所有的业务员.改为使用开闭原则之后,每个银行业务员只负责一项业 ...

  3. java开闭原则 例子_解析Java编程中设计模式的开闭原则的运用

    开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统. 定义: 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. S ...

  4. 设计模式-02.经典设计原则-第一节-单一职责原则,开闭原则,里式替换,接口隔离【万字长文系列】

    文章目录 设计模式经典设计原则-第一节 单一职责原则(SRP) 如何理解单一职责原则? 如何判断类的职责是否足够单一? 类的职责是否设计得越单一越好? 开闭原则(OCP) 如何理解"对扩展开 ...

  5. 【设计模式】软件设计七大原则 ( 开闭原则 )

    文章目录 一.开闭原则简介 二.开闭原则代码示例 1.商品接口 2.普通商品类 3.折扣商品类 4.测试类 一.开闭原则简介 开闭原则 : 定义 : 一个 软件实体 , 类 / 模块 / 函数 , 对 ...

  6. 设计模式-软件架构设计七大原则及开闭原则详解

    前言 在日常工作中,我们使用Java语言进行业务开发的时候,或多或少的都会涉及到设计模式,而运用好设计模式对于我而言,又是一个比较大的难题.为了解决.克服这个难题,Remi酱特别开了这个博客来记录自己 ...

  7. 设计一个扩展自抽象类geometricobject的新的triangle类_面向对象设计原则之开放封闭原则(开闭原则OCP)...

    (1) 定义 一个软件实体(类.模块.函数等),对于扩展是开放的,对于更改是封闭的. 对于扩展是开放的:这意味着模块的行为是可以扩展的.当应用的需求发生改变时,我们可以对模块进行扩展,比如增加新的类或 ...

  8. java开闭原则实现代码_向对象的六大原则

    前言 我们都知道面向对象有六大原则,23种设计模式.它们可以指导我们如何写出更加优秀的代码.六大原则是基础,我们面向对象编程应该尽量遵从这六大原则,才能写出优秀的代码. 23种设计模式是前人为我们总结 ...

  9. 设计模式六大原则之--开闭原则(OCP)

    设计模式六大原则之--开闭原则(OCP) 前言 1 描述 2 理解: 3 问题由来: 4 使用LoD的好处: 5 难点: 6 最佳实践: 7 范例: 前言 The Open - Closed Prin ...

最新文章

  1. LeetCode简单题之长度为三且各字符不同的子字符串
  2. 分享13个Spring Boot 优质开源项目!商城,ERP,管理系统
  3. Python实现固定效应回归模型实现因果关系推断
  4. 重磅!PyTorch 中文手册已开源!理论、实践、应用都有了!
  5. ambari 维护模式及reset API 操作
  6. jQuery中设置树节点被选中
  7. java 后台开发关键词解释
  8. 将视图转为image_使用视图绑定替代 findViewById
  9. DevExpress GridControl Gridview RepositoryItemCheckEdit复选框及获取选择行数据
  10. 从gb2py.idx中获取一个汉字的拼音首字母
  11. Adversarial learned Inference(对抗学习推断器)
  12. get请求和post请求的区别
  13. 利用python构建马科维茨_利用马科维茨投资组合理论构建自己的投资组合
  14. php正则表达式在线测试工具,在线测试正则表达式工具:适合asp.net vb.net cs.net等Web或者Windows程序,便于你快速编写正确正则表达式,提供正则表达式模板供参考。...
  15. this java 错误_java异常错误处理
  16. GPU运算能力对比(详细)
  17. F5系统配置备份及恢复
  18. 3_22_doublewei1
  19. 《BI工程师必读》数据可视化篇 #02
  20. npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'

热门文章

  1. 为什么运行了java文件老是404_java – 为什么Spring MVC用404响应并报告“在...
  2. centos java发送邮件发不出去_传真机发不出传真怎么办 传真机发不出传真解决方法【详解】...
  3. python turtle库setpos_Python内置海龟(turtle)库绘图命令详解(二)
  4. 【excel】日期函数DateDif
  5. eclipse中YAML文件编辑插件:Yaml Editor插件安装
  6. form转json:jquery.serializeJSON
  7. 【Nginx】输出/返回 HelloWorld
  8. java插入时间 mssql_JAVA操作数据库Datetime数据
  9. router-link标签学习
  10. java如何跳出循环6,Java循环结结构