第10章 オブジェクト指向構文 / 第1回 模擬試験
PHPの継承とポリモーフィズムに関する次の記述のうち、正しいものはどれか。
継承は、既存のクラスのプロパティやメソッドを再利用する仕組みである。
正解
`final`キーワードをメソッドに付けても、子クラスは自由にそのメソッドをオーバーライド(上書き)できる。
抽象クラスは、インスタンス化できる。
インターフェイスは、プロパティを定義できる。
解説
継承(`extends`)とは、既存の親クラスが持つプロパティやメソッドを、子クラスがそのまま引き継いで再利用できる仕組みです。
他の選択肢が誤りである理由は次の通りです。
・`final`キーワードをメソッドに付けると、そのメソッドは子クラスで再定義(オーバーライド)できなくなります。「自由にオーバーライドできる」というのは逆の説明です(`final`はオーバーライドを禁止するためのキーワードです)。
・抽象クラス(`abstract class`)は、`new`で直接インスタンス化することができません。具象クラス(抽象クラスを継承し、抽象メソッドをすべて実装したクラス)としてしか実体化できません。
・インターフェイスは、メソッドのシグネチャ(と値を持つ定数)のみを定義でき、実体を持つ通常のプロパティは定義できません。
例:
```
class Base {
final public function locked(): string {
return 'これは変更できない';
}
}
class Child extends Base {
// public function locked(): string { return '上書き'; } // Fatal error: Cannot override final method
}
```
(参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.3節 継承 / 10.4節 ポリモーフィズム p.496〜522)