1、什么是类的多态

在以后的面试或者工作中,肯定会有很多关于类多态的知识点,
下面我们先来一起了解下,class多态的三个特征:

  1. 1、子类继承父类
  2. 2、子类重写父类
  3. 3、父类指向子类

多态实现的前提:
必须是类与类之间要有关系,要么继承,要么实现,存在重写的可能,其实就是抽象函数或接口。
多态的应用:
父类对象的引用指向子类对象,其实本质上就是一个向上转型。
举个模型例子:一家公司有员工类(Employee),
还有其子类:销售(Sales)、市场(Market)、工程师(Engineer)等。
某一天老板招待所有的员工开了个短会,完了之后对所有的员工(Employee)说,大家回去工作吧。
在这里我们可以认为老板调用了所有员工对象的continueToWork()方法,而不是对一个个员工细说做什么工作,比如对销售部说你去制定销售计划(调用makeSalePlan()),对市场部说你去制定产品的价格(调用makeProductPrice())….
这种逐个细说的方式并不是面向对象,而是面向个体。
可以确定的是,员工类应该有一个方法continueToWork()。
而员工如何实现他们工作的方法却只有精确到子类才能确定,因为不同的员工的工作方式是不一样的。
因此,我们很多时候只需要关心对象的父类型,而忽略更精确的子类型,比如上面老板叫大家回去工作时,他对全体员工说的,主要指的是全体员工类型。
多态的好处:
大大提高程序的扩展,增强系统的灵活性,降低模块间的耦合。
例如下列代码,就是多态的表现:

  1. <?php
  2. # 抽象员工类
  3. abstract class Staff {
  4. abstract public function continueToWork();
  5. }
  6. # 销售部
  7. class Sales extends Staff {
  8. public function continueToWork() {
  9. echo '我是销售部:我要出去找客户啦!';
  10. }
  11. }
  12. # 市场部
  13. class Market extends Staff {
  14. public function continueToWork() {
  15. echo '我是市场部:我要回去分析数据了!';
  16. }
  17. }
  18. # 老板类
  19. class Boss {
  20. # 指挥下面的人干活
  21. public function command($obj) {
  22. $obj->continueToWork();
  23. }
  24. }
  25. $obj = new Boss();
  26. $obj->command(new Sales());
  27. $obj->command(new Market());