1、什么是类的多态
在以后的面试或者工作中,肯定会有很多关于类多态的知识点,
下面我们先来一起了解下,class多态的三个特征:
1、子类继承父类2、子类重写父类3、父类指向子类
多态实现的前提:
必须是类与类之间要有关系,要么继承,要么实现,存在重写的可能,其实就是抽象函数或接口。
多态的应用:
父类对象的引用指向子类对象,其实本质上就是一个向上转型。
举个模型例子:一家公司有员工类(Employee),
还有其子类:销售(Sales)、市场(Market)、工程师(Engineer)等。
某一天老板招待所有的员工开了个短会,完了之后对所有的员工(Employee)说,大家回去工作吧。
在这里我们可以认为老板调用了所有员工对象的continueToWork()方法,而不是对一个个员工细说做什么工作,比如对销售部说你去制定销售计划(调用makeSalePlan()),对市场部说你去制定产品的价格(调用makeProductPrice())….
这种逐个细说的方式并不是面向对象,而是面向个体。
可以确定的是,员工类应该有一个方法continueToWork()。
而员工如何实现他们工作的方法却只有精确到子类才能确定,因为不同的员工的工作方式是不一样的。
因此,我们很多时候只需要关心对象的父类型,而忽略更精确的子类型,比如上面老板叫大家回去工作时,他对全体员工说的,主要指的是全体员工类型。
多态的好处:
大大提高程序的扩展,增强系统的灵活性,降低模块间的耦合。
例如下列代码,就是多态的表现:
<?php# 抽象员工类abstract class Staff {abstract public function continueToWork();}# 销售部class Sales extends Staff {public function continueToWork() {echo '我是销售部:我要出去找客户啦!';}}# 市场部class Market extends Staff {public function continueToWork() {echo '我是市场部:我要回去分析数据了!';}}# 老板类class Boss {# 指挥下面的人干活public function command($obj) {$obj->continueToWork();}}$obj = new Boss();$obj->command(new Sales());$obj->command(new Market());
