子類別定義與父類別同名、同參數個數的方法,即為覆寫。呼叫時會優先執行子類別版本,實現多型。
<?php
abstract class Animal {
public $name;
protected $price;
public function cry() {
echo "不知道動物怎麼叫..
";
}
}
class Dog extends Animal {
public function cry() { // 覆寫
echo "小狗汪汪叫..
";
}
}
class Pig extends Animal {
public function cry() { // 覆寫
echo "小豬哼哼叫..
";
}
}
$animal = new Animal();
$dog = new Dog();
$pig = new Pig();
$animal->cry(); // 不知道動物怎麼叫..
$dog->cry(); // 小狗汪汪叫..
$pig->cry(); // 小豬哼哼叫..
?>
parent::methodName() 或 ParentClass::methodName()。<?php
interface Validator {
public function isValid($value): bool;
}
class MoreThanZeroValidator implements Validator {
public function isValid($value): bool { return $value > 0; }
}
class EvenValidator implements Validator {
public function isValid($value): bool { return $value % 2 === 0; }
}
class ArrayProcessor {
private Validator $rule;
public function __construct(Validator $rule) { $this->rule = $rule; }
public function process(array $numbers) {
foreach ($numbers as $n) {
if ($this->rule->isValid($n)) echo "$n ";
}
}
}
// 客戶端:注入不同驗證策略
$processor = new ArrayProcessor(new EvenValidator());
$processor->process([1, 20, 18, 5, 0, 31, 42]); // 輸出 20 18 0 42
?>
final 禁止覆寫。private 或 static 方法(static 屬於類別,非實例,稱「隱藏」而非覆寫)。方法覆寫是 OOP 多型核心,配合介面/抽象類別可實現策略模式、命令模式等設計模式,提升程式碼彈性與可維護性。