面向对象的三大特征

我们知道,面向对象有三大特征,分别是:

封装

继承

多态

封装与继承

封装

因为对象都对自己负责,所以,对象的很多东西都不需要或不可以暴露给其他对象。

比如:

小明不需要将所有的信息告诉别人;

手机不能不封装而把CPU、内存卡等等都暴露给用户,这太危险了(如下图)。

封装解决了数据的安全性,内在也体现了‘每个对象都对自己负责’。

继承

继承,没什么好说的,主要是实现了代码的复用。

但说到这里,我们知道实现代码的复用,有两种方式,一种是组合、一种是继承。

先给大家抛出一个问题:“什么时候该用组合?什么时候该用继承呢?”

这个问题大家先想想,我们以后再讨论。

重头戏·多态

定义

对于多态,我们先下一个定义:

同一个操作,作用于不同的对象,会产生不同的结果。

说白了,就是一个相同的指令发出,不同的对象会对这个指令有不同的反应,所以称为多态。

举个栗子

比如,我们有2个对象,分别是 word、excel。

我们使用相同的操作 Ctrl+N。

相同的操作:

对于word是新建word文档;

对于excel是新建excel表格。

多态有什么好处

多态最大的好处可以用2个词语来概括:“灵活”、“解耦”。

耦合度的意思是模块与模块之间、代码与代码之间的关联度。

紧耦合也就是他们之间的关联度大,这样的代码是很难维护的,很容易出bug的。出现一个bug,其他bug很可能像滚雪球一样增长。

我们经常说:“要面向接口编程,而不是面向实现编程”。

多态性,也就要求我们面向接口编程。

不同的对象,相同的接口,但因为多态,有了不同的实现。

这样面向接口编程,就降低了耦合度,很灵活。

PHP中的多态

talk is cheap,show me your code

abstract class Animal{

//说话的方法

abstract public function say();

//吃的方法

public function eat(){

echo "eating food...";

}

}

//Dog子类继承Animal抽象类

class Dog extends Animal {

public function say(){

echo "Dog say wangwang\n";

}

}

//Cat子类继承Animal抽象类

class Cat extends Animal {

public function say(){

echo "Cat say miaomiao\n";

}

}

//test function

function work(Animal $obj){

if($obj instanceof Animal){

$obj->say();

}else{

echo "sorry.It's wrong";

}

}

work(new Cat()); //Cat say miaomiao

work(new Dog()); //Dog say wangwang

更多精彩,请关注公众号“聊聊代码”,让我们一起聊聊“左手代码右手诗”的事儿。

php 假多态,论PHP面向对象之-多态相关推荐

  1. python中的多态用法_Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...

  2. 12 Java面向对象之多态

    JavaSE 基础之十二 12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力 多态的分类 1. 静态多态:在编译期间,程序就能决定调用哪个方法.方法的重载就表现出 ...

  3. swift面向对象之多态与继承

    swift面向对象之多态与继承 1.多态 运行时多态 运行时多态的要点 1.要有继承关系的存在 2.子类要重写父类的方法 3.父类类型的引用指向子类实例 2.继承 1.继承的注意 继承可以用于类而不能 ...

  4. Golang笔记-面向对象编程-多态/类型断言

    面向对象编程-多态 基本介绍 变量(实例)具有多种形态.面向对象的第三大特征,在 Go 语言,多态特征是通过接口实现的.可 以按照统一的接口来调用不同的实现.这时接口变量就呈现不同的形态. 快速入门 ...

  5. Java 面向对象:多态的理解

    Java 面向对象:多态的理解 一.多态的定义 一个对象的实际类型是确定的,但可以指向引用对象的类型可以有很多(父类,有关系的类) 操作符的多态 +可以作为算数运算,也可以作为字符串连接 类的多态 父 ...

  6. python面向对象三大特性_Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...

  7. 【转】面向对象之多态(向上转型与向下转型)

    转:https://blog.csdn.net/qq_31655965/article/details/54746235. 多态,大概每个人都知道.但是,又有几个人真的理解什么是多态.多态有哪些细节呢 ...

  8. JAVA基础第三章 面向对象进阶--多态等

    3.1变量及其传递 1.变量实际是内存空间.引用型变量里存储的是引用,可以理解为对象实体的地址.指针.句柄.总之,通过这个引用我们就可以操纵这个对象. 例: MyDate m,n;  //定义两个My ...

  9. DYA9面向对象中--多态

    多态(polymorphic) 多态可以提高代码的复用性,利于代码维护 方法或对象具有多种形态.是面向对象的第三大特征,多态是建立再封装和继承基础之上的 1,方法的多态 重写和重载就体现多态 2,对象 ...

最新文章

  1. iOS 相册相机应用2
  2. elasticsearch使用jetty进行简单的权限控制
  3. Vue.js 2 渐进式前端框架 的最佳学习方法
  4. 网狐棋牌(十) 成也萧何败也肖何? IUnknowEx
  5. sizeof string
  6. 前端开发中,如何优化图像?图像格式的区别?
  7. DPDK初始化分析(三)
  8. 超好用的代码格式化工具Astyle使用
  9. 一分钟搞定网页监控,实现网站链接百度自动推送
  10. Linux内存映射实现
  11. 华为 ensp 下载安装
  12. word单独编辑或者删除某一页的页眉
  13. java毫秒_JAVA中怎么获取毫秒和微秒数
  14. How-To-Ask-Questions-The-Smart-Way(提问的智慧)
  15. jdk11安装及网盘下载地址
  16. HTML和ftl的关系
  17. 前端学习记录005_canvas绘制钟表
  18. ElasticSearch分布式搜索引擎从入门到实战应用(入门篇-基本命令操作)
  19. 容器+云管,BoCloud博云定位PaaS场景而非只是容器标签
  20. GitHub文件大小限制及相关建议

热门文章

  1. JavaScript 函数 伪数组 arguments
  2. springMvc注解之@ResponseBody和@RequestBody
  3. [C#] - 从 HTML 代码中 转换 / 提取 可读文字(PlainText)的方法
  4. M码小黄衫买家秀=w=
  5. 原生Get请求和Post请求
  6. MyEclipse设置选中单词其它同名单词前景色和背景色
  7. Javascript学习笔记12——Ajax入门
  8. Asp.net中执行.EXE程序的方法
  9. 浅析Facebook LibraBFT与比原链Bystack BBFT共识
  10. C# 空合并运算符 ??