php 假多态,论PHP面向对象之-多态
面向对象的三大特征
我们知道,面向对象有三大特征,分别是:
封装
继承
多态
封装与继承
封装
因为对象都对自己负责,所以,对象的很多东西都不需要或不可以暴露给其他对象。
比如:
小明不需要将所有的信息告诉别人;
手机不能不封装而把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面向对象之-多态相关推荐
- python中的多态用法_Python面向对象之多态原理与用法案例分析
本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...
- 12 Java面向对象之多态
JavaSE 基础之十二 12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力 多态的分类 1. 静态多态:在编译期间,程序就能决定调用哪个方法.方法的重载就表现出 ...
- swift面向对象之多态与继承
swift面向对象之多态与继承 1.多态 运行时多态 运行时多态的要点 1.要有继承关系的存在 2.子类要重写父类的方法 3.父类类型的引用指向子类实例 2.继承 1.继承的注意 继承可以用于类而不能 ...
- Golang笔记-面向对象编程-多态/类型断言
面向对象编程-多态 基本介绍 变量(实例)具有多种形态.面向对象的第三大特征,在 Go 语言,多态特征是通过接口实现的.可 以按照统一的接口来调用不同的实现.这时接口变量就呈现不同的形态. 快速入门 ...
- Java 面向对象:多态的理解
Java 面向对象:多态的理解 一.多态的定义 一个对象的实际类型是确定的,但可以指向引用对象的类型可以有很多(父类,有关系的类) 操作符的多态 +可以作为算数运算,也可以作为字符串连接 类的多态 父 ...
- python面向对象三大特性_Python面向对象之多态原理与用法案例分析
本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...
- 【转】面向对象之多态(向上转型与向下转型)
转:https://blog.csdn.net/qq_31655965/article/details/54746235. 多态,大概每个人都知道.但是,又有几个人真的理解什么是多态.多态有哪些细节呢 ...
- JAVA基础第三章 面向对象进阶--多态等
3.1变量及其传递 1.变量实际是内存空间.引用型变量里存储的是引用,可以理解为对象实体的地址.指针.句柄.总之,通过这个引用我们就可以操纵这个对象. 例: MyDate m,n; //定义两个My ...
- DYA9面向对象中--多态
多态(polymorphic) 多态可以提高代码的复用性,利于代码维护 方法或对象具有多种形态.是面向对象的第三大特征,多态是建立再封装和继承基础之上的 1,方法的多态 重写和重载就体现多态 2,对象 ...
最新文章
- 采集音频和摄像头视频并实时H264编码及AAC编码[转]
- linux远程访问及控制
- hdu 2897(威佐夫博奕变形)
- fftw3图片傅里叶变换_DFT-去除图片周期性噪声
- Linux字符设备驱动框架
- python中函数和类的区别_Python中函数和方法的区别
- Android -- I/O CALL SMS Layout
- iphone @selector带参数问题
- Android.mk调用bin/shell
- MariaDB基本操作--(创建用户)(转)
- vue-cropper 自定义旋转任意角度
- pr用什么显卡比较好_用视频剪辑软件pr,电脑要什么配置最好
- linux 流场分析软件,scSTREAM | 通用流体分析软件
- .json格式转为.yml格式
- 计算机技术未来的研究热点,计算机科学前沿热点及发展趋势
- python面向对象练习题
- 个人youtube视频观看历史分析
- ed是什么梗_美国大学EA,ED什么意思?
- java 模板模式_java设计模式之模板方法模式详解
- 浏览器下载blob文件流(兼容IE浏览器和其他主流浏览器)
热门文章
- python绘制表格界面_python 读取 excel 生成 html 页面
- mysql 存储过程循环一张表的所有记录_MySQL数据库知识汇总
- 20211209 为什么Barbalat引理推论中必须有导数一致有界,才能得到导数趋于0
- 20211119 Latex中参考文献中的人名怪字母如何输入
- poj/OpenJ_Bailian - 2528 离散化+线段树
- Kubernetes 系列(三):Kubernetes使用Traefik Ingress暴露服务
- Apex 的异常处理
- 【代码笔记】iOS-长条蓝色button
- mybatis04--Mapper动态代理实现
- HDU 4893 - Wow! Such Sequence!(线段树)