PHP7.4.1におけるメソッドのオーバーライドについて。
<?php
//cl1クラス
class cl1 {
protected int $i1; //privateだとcl1_1クラスからアクセスできない
//コンストラクター
public function __construct(int $i1) { //cl1インスタンス作成時のパラメータが$i1に入る
$this->i1 = $i1; //i1プロパティに$i1の値を代入する
}
//i1プロパティのゲッター
public function getI1($a = "個\n"): string { //getI1メソッド実行時のパラメータが$aに入る
return $this->i1 . $a; //i1プロパティに$aを連結して返す
}
}
//cl1のサブクラス
class cl1_1 extends cl1 { //extendsでcl1のサブクラスを作成
//i1プロパティのゲッター
public function getI1($a = "冊\n"): string { //ここがオーバーライド
return $this->i1 . $a; //i1プロパティに$aを連結して返す
}
}
//実行
$cl1 = new cl1(5); //cl1クラスのインスタンスの作成
echo $cl1->getI1(); //5個
$cl1_1 = new cl1_1(10); //cl1_1クラスのインスタンスの作成
echo $cl1_1->getI1(); //10冊
//cl1クラス
class cl1 {
protected int $i1; //privateだとcl1_1クラスからアクセスできない
//コンストラクター
public function __construct(int $i1) { //cl1インスタンス作成時のパラメータが$i1に入る
$this->i1 = $i1; //i1プロパティに$i1の値を代入する
}
//i1プロパティのゲッター
public function getI1($a = "個\n"): string { //getI1メソッド実行時のパラメータが$aに入る
return $this->i1 . $a; //i1プロパティに$aを連結して返す
}
}
//cl1のサブクラス
class cl1_1 extends cl1 { //extendsでcl1のサブクラスを作成
//i1プロパティのゲッター
public function getI1($a = "冊\n"): string { //ここがオーバーライド
return $this->i1 . $a; //i1プロパティに$aを連結して返す
}
}
//実行
$cl1 = new cl1(5); //cl1クラスのインスタンスの作成
echo $cl1->getI1(); //5個
$cl1_1 = new cl1_1(10); //cl1_1クラスのインスタンスの作成
echo $cl1_1->getI1(); //10冊
オーバーライドとは、サブクラスに親クラスに定義したメソッドと同じ名前のメソッドを宣言したときに、そのサブクラスのインスタンスからそのメソッドを呼び出すと親クラスのメソッドではなくサブクラスのメソッドを呼び出すことができる現象のことです。
オーバーライドメソッドでは、サブクラスのインスタンスから実行するときはサブクラスの同名メソッドが呼び出されます。
しかし親クラスのインスタンスから同名のメソッドを実行すると、親クラスにあるそのメソッドを呼び出すことができます。
ちなみに、コンストラクターであってもオーバーライドは適用されます。
以上です。