第10章 オブジェクト指向構文 / 第2回 模擬試験

PHPの抽象クラスとインターフェースに関する次の記述のうち、正しいものはどれか。

抽象クラスは`abstract`キーワードで宣言し、直接インスタンス化できない。 正解
インターフェースはメソッドの実装(本体)を持つことができる。
1つのクラスは複数のインターフェースを実装できない。
抽象メソッドは処理内容を持ち、子クラスでオーバーライドできない。
解説
抽象クラス(`abstract class`)は、直接`new`でインスタンス化することができないクラスです。共通の実装や抽象メソッド(実装を持たないメソッド)を定義し、子クラスに継承させて使います。 他の選択肢が誤りである理由は次の通りです。 ・インターフェースは、メソッドのシグネチャ(名前・引数・戻り値の型)のみを定義し、メソッドの実装(本体)を持つことはできません。 ・1つのクラスは、`implements`にカンマ区切りで複数のインターフェース名を指定することで、複数のインターフェースを同時に実装できます。 ・抽象メソッド(`abstract public function foo();`)は処理内容を持たず、それを継承する子クラスで必ずオーバーライド(実装)しなければなりません。 例: ``` interface Loggable { public function log(string $msg): void; } interface Cacheable { public function cacheKey(): string; } abstract class Base implements Loggable, Cacheable { abstract public function log(string $msg): void; // 実装なし } ``` (参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.4節 ポリモーフィズム p.511〜522)

あわせて読みたい解説記事