多态|学习笔记

简介: 快速学习多态

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第二阶段多态】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/712/detail/12689


多态

 

主要内容:

一、目标

二、概念

三、步骤

四、小结

 

学习面向对象的三大特性之多态,此概念相对较麻烦,需要仔细了解。

 

一、目标

了解多态的概念,理解多态的作用


二、概念

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果

指可以调用多个同名函数,由于数据不同,可能出现不同效果,一个名字可能有多种状态,可以换不同方式触发不同的状态和效果,此为多态,以下为多态的条件:
1.需要发生类的继承,同时出现方法的重写(override),即子类拥有与父类同名的方法

2.在实例化对象的时候让父类对象指向子类对象(强制类型,PHP 不支持)

PHP 的优势为弱势类型,故操作数据十分灵活。

3.结果:父类对象表现的子类对象的特点

 

三、步骤

1、明确继承关系:子类继承父类

2、子类重写父类方法
3、实例化子类,但是存储子类对象的数据类型为父类对象

4、实现:父类对象表现出子类对象的形态

父类的对象,调用子类的方法,此表现为多态。

 

四、示例

1、多态需要强类型语言,以 Java 为例

image.png

观察可得,Animal 为一个动物类,方法为 show ,system.out.orint1n(“Animal”); 意思为输出,Dog extends Animal 为子类,show 方法重写,然后实例化子类,指向的变量类型为Animal 类型,父类的类型及名义,但保存为子类的对象,当父类的对象调用show 方法时,打印为dog ,父类的形态表现为子类最终的形态,此为多态。

2、PHP 是弱类型语言,所以不存在变量的强制类型,因此PHP不支持多态。但是PHP可以模拟多态

函数里的强制类型,强制数据的传入类型,是对数据进行限定,并没有限定变量。而强类型,为限制变量本身,变量只能存储某些数据类型,其他任何数据类型都不可以。PHP 不支持多态,但是可以模拟多态。

(1)多种子类继承父类

(2)子类重写父类方法

(3)父类定义方法实现统一重写方法调用

父类里定义方法,专门调用子类重写的父类方法,但并不是当前的方法。

 image.png

image.png

观察可得,父类里面的 show 方法为强制类型,要求对象必须为 Animal ,display 为对象调用自己的方法,父类也有此方法,输出的为类名 Animal ,父类的两个方法都可以进行调用,此时有名为 cat 的一个子类,因为同名,故重写父类的方法,dog 也进行重写,此时调用Animal 的静态方法,将 new cat 对象传入,此时输出 cat,cat 调用自己的display 方法,同理,dog 输出 dog ,对象不同导致输出的结果不同,此表现为多态的模拟。因为存在继承,彼此之间是相通的,故 cat 对象可以为 Animal 对象,此为多态的概念。若想深入了解,建议大家多了解强类型语言的多态。

 

五、小结

1、多态的发生必须是有继承关系,并且子类要重写父类方法

2、多态是指父类对象拥有子类形态,并且可以表现出子类的特性(调用子类方法)

3、PHP 是弱类型语言,不支持多态

PHP 可以进行模拟,建立在继承、重写、多态本身的特性了解的基础上去理解多态。

相关文章
|
10月前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
存储 关系型数据库 MySQL
MySQL如何备份?
【10月更文挑战第2天】MySQL如何备份?
1055 3
|
XML 存储 程序员
老程序员分享:libxml2的安装及使用【总结】
老程序员分享:libxml2的安装及使用【总结】
1293 0
|
存储 安全 Java
settings.xml详解(很详细读这一篇就够了)
settings.xml是Java项目中用于配置Maven的重要文件,它详细规定了Maven的运行规则和行为。该文件通常位于用户家目录下的.m2文件夹中,或者项目根目录下的.mvn文件夹内。settings.xml中包含了众多配置项,从代理设置、镜像仓库配置,到服务器认证信息、插件组等,均可以在此文件中进行细致定义。通过合理配置settings.xml,我们可以优化Maven的依赖下载速度,保障仓库访问的安全性,甚至实现私有仓库的搭建与管理。深入了解settings.xml的每一项配置,对于提高Maven使用效率、保障项目构建稳定性具有重要意义。因此,无论是Maven初学者还是资深用户,都应仔
14568 4
can not be used when making a shared object; recompile with -fPIC
can not be used when making a shared object; recompile with -fPIC
420 0
|
网络协议 测试技术 Go
|
设计模式 算法 Java
【白话设计模式】23种设计模式一句话通俗讲解,女朋友都能听懂(导航篇)
哈喽,大家好,我是一条。 【白话设计模式】正式开篇,共23种设计模式每个都用大白话+图解给大家讲明白,之后再举例说明业务场景,真正做到学以致用。 本篇是导航篇,主要是介绍设计模式和23设计模式的一句话解读。
493 0
|
存储 设计模式 算法
23 种设计模式的通俗解释
追 MM 少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是 MM 爱吃的东西,虽然口味有所不同,但不管你带 MM 去麦当劳或肯德基,只管向服务员说「来四个鸡翅」就行了。麦当劳和肯德基就是生产鸡翅的 Factory 工厂模式:客户类和工厂类分开。 消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就
|
6天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
5天前
|
云安全 人工智能 自然语言处理
阿里云x硅基流动:AI安全护栏助力构建可信模型生态
阿里云AI安全护栏:大模型的“智能过滤系统”。