面向对象的三大特征

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

封装

继承

多态

封装与继承

封装

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

比如:

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

手机不能不封装而把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. 采集音频和摄像头视频并实时H264编码及AAC编码[转]
  2. linux远程访问及控制
  3. hdu 2897(威佐夫博奕变形)
  4. fftw3图片傅里叶变换_DFT-去除图片周期性噪声
  5. Linux字符设备驱动框架
  6. python中函数和类的区别_Python中函数和方法的区别
  7. Android -- I/O CALL SMS Layout
  8. iphone @selector带参数问题
  9. Android.mk调用bin/shell
  10. MariaDB基本操作--(创建用户)(转)
  11. vue-cropper 自定义旋转任意角度
  12. pr用什么显卡比较好_用视频剪辑软件pr,电脑要什么配置最好
  13. linux 流场分析软件,scSTREAM | 通用流体分析软件
  14. .json格式转为.yml格式
  15. 计算机技术未来的研究热点,计算机科学前沿热点及发展趋势
  16. python面向对象练习题
  17. 个人youtube视频观看历史分析
  18. ed是什么梗_美国大学EA,ED什么意思?
  19. java 模板模式_java设计模式之模板方法模式详解
  20. 浏览器下载blob文件流(兼容IE浏览器和其他主流浏览器)

热门文章

  1. python绘制表格界面_python 读取 excel 生成 html 页面
  2. mysql 存储过程循环一张表的所有记录_MySQL数据库知识汇总
  3. 20211209 为什么Barbalat引理推论中必须有导数一致有界,才能得到导数趋于0
  4. 20211119 Latex中参考文献中的人名怪字母如何输入
  5. poj/OpenJ_Bailian - 2528 离散化+线段树
  6. Kubernetes 系列(三):Kubernetes使用Traefik Ingress暴露服务
  7. Apex 的异常处理
  8. 【代码笔记】iOS-长条蓝色button
  9. mybatis04--Mapper动态代理实现
  10. HDU 4893 - Wow! Such Sequence!(线段树)