B350 クラスの継承

クラスの継承とは、クラスが持っているメソッド(関数)やプロパティ(変数)を別のクラスに引き継がせることです。継承元のクラスを親クラス、継承先のクラスを子クラスといいます。今回はこのクラスの継承について紹介します。

クラスの継承方法

class 子クラス extends 親クラス{} という記載方法をすることでクラスを継承することができます。

PHP
class ParentClass //親クラスを定義
{
    public function printParent() {
        echo('親クラス');
    }
}
class ChildClass extends ParentClass  //親クラスを継承して子クラスを定義
{
    public function printChild() {
        echo('子クラス');
    }
}
$child = new ChildClass();
$child->printparent(); //親クラスを継承しているので子クラスのインスタンスでもprintParentメソッドの使用が可
$child->printChild();

出力結果

PHP
親クラス子クラス

上記のようにクラスを継承することで、子クラスのインスタンスに対しても親クラスのメソッドを用いることができるようになります。

オーバーライド

オーバーライドとは、継承元である親クラスで定義されているメソッドを、子クラスで書き換えることです。

親クラスにあるメソッドと、同じ名前、同じ引数のメソッドを子クラスに記述することでオーバーライドすることができます。

PHP
class ParentClass //親クラスを定義
{
    public function print() {
        echo('親クラス');
    }
}
class ChildClass extends ParentClass  //親クラスを継承して子クラスを定義
{
    public function print() { //子クラスで定義しているメソッドで上書きをする
        echo('子クラス');
    }
}
$child = new ChildClass();
$child->print(); 

出力結果

PHP
子クラス

例題

以下コードの出力値はどれか

PHP
class GreetingClass
{
    public function hello() {
        echo('こんにちは');
    }
}
class ChildClass extends GreetingClass
{
    public function hello() {
        echo('こんばんは');
    }
}
$child = new ChildClass();
$child->hello(); 
  1. こんにちは
  2. こんばんは
  3. こんにちはこんばんは
  4. PHP Fatal error: Uncaught Error: Call to undefined method ChildClass::hello()
回答

2. こんばんは
ChildClassのhello関数でオーバーライドしているため。

---