<?php练功房

第 4 章 · 面向对象 · 第 4.2 课

继承、抽象类与接口

约 18 分钟

继承

class Cat extends Animal 表示 Cat 继承 Animal:自动拥有 Animal 的属性和方法,还可以重写(override)其中的方法,或者新增自己的方法。

  • protected:类自己和子类能访问,外部不能。
  • parent::方法名():在子类里调用父类的版本。

同一行 $a->speak(),对不同的对象做了不同的事,这叫多态。调用方不用关心对象具体是哪一类,只要知道它能 speak()。

接口和抽象类

  • 接口(interface)只规定“必须有哪些方法”,不写实现。一个类可以 implements 多个接口。
  • 抽象类(abstract class)可以写一部分实现,把另一部分声明为 abstract 留给子类完成。抽象类不能直接 new。
  • 一个类只能 extends 一个父类。

选择题

关于 PHP 的继承,哪句话是对的?

练习 1

支付方式

接口 Payment 和函数 checkout 已经写好了。请写两个类 Alipay 和 WechatPay 实现这个接口,让:

  • checkout(new Alipay(), 100) 返回 "支付宝支付 100 元"
  • checkout(new WechatPay(), 25.5) 返回 "微信支付 25.5 元"

练习 2

经理的工资

Employee 类已经写好。写一个 Manager 类继承它:

  • 构造函数多接收一个奖金 $bonus
  • 重写 salary():返回 父类计算的工资 + 奖金,要用 parent::salary()

new Manager("王经理", 8000, 3000) 的工资是 11000。