Z
ZHANK
面向对象

继承与多态

extends 继承、parent::、方法重写 override、final 禁止继承

继承与多态

extends 继承父类,parent:: 调用父类方法。final 禁止继承,override 显式重写。

学完本章你将: 掌握 extends 继承、parent::、方法重写、final 关键字。


基本继承

php
<?php
class Animal {
    public function __construct(
        protected string $name,
    ) { }

    public function speak(): string {
        return "{$this->name} 发出叫声";
    }
}

class Dog extends Animal {
    public function speak(): string {
        return "{$this->name} 汪汪叫!";
    }

    public function fetch(): string {
        return "{$this->name} 去捡球了";
    }
}

$dog = new Dog("旺财");
echo $dog->speak();  // 旺财 汪汪叫!
echo $dog->fetch();  // 旺财 去捡球了

parent:: 调用父类方法

php
<?php
class Logger {
    public function log(string $msg): void {
        echo "[LOG] $msg\n";
    }
}

class TimestampLogger extends Logger {
    public function log(string $msg): void {
        $msg = date("H:i:s") . " " . $msg;
        parent::log($msg);  // 调用父类的 log
    }
}

final —— 禁止继承或重写

php
<?php
final class StringUtils { }    // 不能被继承
// class MyUtils extends StringUtils { }  // ❌ 错误

class Base {
    final public function critical(): void { }
}

class Derived extends Base {
    // public function critical(): void { }  // ❌ 错误——不能重写 final 方法
}