多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息将可以产生不同的结果,这种现象称为多态性。
多态性允许每个对象以适合自身的方式去响应共同的消息。多态性增强了软件的灵活性和重用性。
在面向对象的软件开发中,多态性是最为重要的部分之一。面向对象编程并不只是将相关的方法与数据简单的结合起来,而是采用面向对象编程中的各种要素将现实生活中的各种情况清晰的描述出来。这一小节将对面向对象编程中的多态性作详细的讲解。
1.什么是多态
多 态(Polymorphism)按字面上意思理解就是“多种形状”。可以理解为多种表现形式,也即“一个对外接口,多个内部实现方法”。在面向对象的理论 中,多态性的一般定义为:同一个操作作用于不同的类的实例,将产生不同的执行结果。也即不同类的对象收到相同的消息时,将得到不同的结果。
在实际的应用开发中,采用面向对象中的多态主要在于可以将不同的子类对象都当作一个父类来处理,并且可以屏蔽不同子类对象之间所存在的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
2.多态的应用设计
在实际的应用开发中,通常为了使项目能够在以后的时间里的轻松实现扩展与升级,需要通过继承实现可复用模块进行轻松升级。在进行可复用模块设计时,就需要尽可能的减少使用流程控制语句。此时就可以采用多态实现该类设计。
【示例】例举了通常采用流程控制语句实现不同类的处理。其代码如下所示。
复制代码 代码如下:
<?php
class painter{ //定义油漆工类
public function paintbrush(){ //定义油漆工动作
echo "油漆工正在刷漆!/n";
}
}
class typist{ //定义打字员类
public function typed(){ //定义打字员工作
echo "打字员正在打字!/n";
}
}
function printworking($obj){ //定义处理类
if($obj instanceof painter){ //若对象是油漆工类,则显示油漆工动作
$obj->paintbrush();
}elseif($obj instanceof typist){ //若对象是打字员类,则显示打字员动作
$obj->typed();
}else{ //若非以上类,则显示出错信息
echo "Error: 对象错误!";
}
}
printworking(new painter()); //显示员工工作
printworking(new typist()); //显示员工工作
?>
分析:在上述程序中,首先定义两个员工类:油漆工类和打字员类。然后定义一个处理函数,在该函数中,判断员工是否为已经定义的员工,打印出员工的工作状态。其结果如下所示。
油漆工正在刷漆
打字员正在打字
从 以上程序可轻松看出,若想显示其几种员工的工作状态,需要首先定义该员工类,并在该员工类中定义员工的工作,然后在printworking()函数中增 加elseif语句以检查对象是哪一员工类的实例。这在实际的应用中,是非常不可取的。若此时采用多态,则可以轻松解决此问题。
可以首先创建一个员工父类,所有的员工类将继承自该员工父类,并且继承父类的所有方法与属性。然后在员工类中创建“是一”关系,判断是否为合法的员工。
【示例】例举了采用多态的方式改写上例。其代码如下所示。
复制代码 代码如下:
<?php
class employee{//定义员工父类
protected function working(){//定义员工工作,需要在子类的实现
echo "本方法需要在子类中重载!";
}
}
class painter extends employee{//定义油漆工类
public function working(){//实现继承的工作方法
echo "油漆工正在刷漆!/n";
}
}
class typist extends employee{//定义打字员类
public function working(){
echo "打字员正在打字!/n";
}
}
class manager extends employee{//定义经理类
public function working(){
echo "经理正在开会!";
}
}
function printworking($obj){//定义处理方法
if($obj instanceof employee){//若是员工对象,则显示其工作状态
$obj->working();
}else{//否则显示错误信息
echo "Error: 对象错误!";
}
}
printworking(new painter());//显示油漆工的工作
printworking(new typist());//显示打字员的工作
printworking(new manager());//显示经理的工作
?>
分析:在上述程序中,首先定义一个员工基类,并定义一个员工工作状态的方法。然后定义将继承自员工基类的三个员工类:油漆工类、打字员类和经理类。然后定义显示员工工作状态的方法。并在该方法中创建一个“是一”关系,用于判断是否为合法的员工。其结果如下所示。
油漆工正在刷漆!
打字员正在打字!
经理正在开会!
从上例可发现,无论增加多少个员工类,只需要实现自员工父类继承的该员工类和方法。而无须修改显示员工工作状态的方法printworking()。
相关推荐:
SEO表述:如何通过精准优化让你的内容脱颖而出,江阴网站建设怎么样啊
SEO资讯:最新趋势,提升网站排名,快速突破流量瓶颈,廊坊seo推广咨询服务
AI网页效果生成:开启网站设计的新纪元,ai画线祥云
ChatGPT不能用?揭秘你可能忽视的真相和解决方法,强国ai2022
SEO而且:打造高效网站流量增长的秘密武器,滨江网站推广营销
seo需要做些什么,做seo的 ,超级ai地图
seo适合什么人做,哪种seo做得好 ,晋城ai论文写作免费
seo类文章是什么,seo技术文章 ,ai3.5-ai聊天
高效创作新时代AI文案速写工具,让创作更轻松
AI一键生成文章免费版:颠覆写作新体验
Bing学术搜索结果不显示时间?如何解决这一问题,提升学术研究效率!,ai怎么参考线
seo需要学些什么内容,学seo的基础 ,中国ai公司年收入
seo该从什么开始,seo是什么时候开始的 ,ai写作免费英文怎么说
SEO关键词推广软件官网-助力企业实现高效精准的网络营销,圈圈ai
ChatGPT已识别但不可用?揭秘背后原因与解决方案!,小狸ai和斑马ai语文
用AI征文工具,轻松创作出精彩文章!
SEO对策:提升网站排名与流量的必备策略,SEO入门相机平价学生
2025百度收录优化:提升网站排名,助力企业数字化转型,第一ai做
为什么做抖音seo,为什么做抖音推广 ,描边ai虚线
SEO监控:精准把握网站排名与优化成效的利器,湖南seo排名商家名单
SEO立刻:快速提升网站排名,带你走在搜索引擎前沿,网站建设怎么推广好做
SEO与SEM策略:提升网站流量与品牌曝光的双剑合璧,ai补图
用AI写文,开启创作新时代
SEO场景下的数字营销:如何通过精准优化提升网站流量,陕西融发建设集团网站
未来智能:AI智能人工软件引领数字化变革
SEO添加:提升网站流量与排名的必备策略,seo团队成员中国人
互联网快排:助力企业网站流量爆发的秘密武器,西安网站建设找资源公司
GPT在智能聊天机器人中的作用:重塑沟通体验,开创智能未来,百万级ai
ChatGPT免费版的限制:你需要了解的5大制约因素,Ai分解模型
为什么做seo矩阵项目,为什么做seo矩阵项目不能做 ,怎么用ai写作
ChatGPT无法加载?检查网络并尝试重启,助您快速恢复畅通体验,burj ai
SEM+SEO:助力企业数字化营销的双剑合璧之道,ai头像丑
SEO与SEM:谁才是提升网站流量的王者?,Ai中字体如何变形立体
什么是seo推广找行者SEO,seo推广效果怎么样 ,西宁ai万词霸屏系统
如何通过AI写文章,轻松提高写作效率与质量
SEO兼职:如何通过SEO兼职实现收入增长与职业突破,濮阳网站建设官网
seo网络上什么意思,seo表示什么 ,如何避免今日头条ai写作检测
SEO量:提升网站流量和排名的关键法则,德兴seo
目前AI软件有哪些?智能新时代的必备工具
什么是seo反连接,网站反链多好还是少好 ,网易ai产品
SEO优化要钱吗?揭秘SEO投资背后的价值与回报,ai领域
SEO更好,让你的网站从此脱颖而出,渝中的知名网站建设
SEO化学物质:如何在化工行业提升搜索引擎排名和品牌曝光,rack ai
好用的人工智能AI软件推荐,让你的生活更智能!
seo需要保持什么心态,seo的要求 ,ai83562
如何下载免费AI软件,让你的工作和生活更智能
SEO确实是企业增长的关键,这些技巧让你走在行业前沿,山东网站建设信息
ChatGPT的超链接点不开?解决方法一网打尽!,情感ai写作指令是什么
自动AI写文章:轻松创作时代的全新利器
SEO阶段解析:从入门到精通,助你站稳搜索引擎的前沿,网站建设特定开发