第 4 章 · 面向对象 · 第 4.2 课
继承、抽象类与接口
继承
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。