第10章 継承とオーバーライド

10.1 継承のしくみを知る

 前章の例外処理の中で、例外クラスを拡張するという考えが出てきました。この既に定義したクラスを元に新しいクラスを定義する方法を本章では学習していきます。

10.1.1 クラスの継承とは

 既存のクラスを元に新しい別のクラスを作成し、既存のクラスの機能を受け継がせることを継承(inheritance)といいます。このとき、元になる既存のクラスを基本クラス(base class)(別名:親クラス)、新しいクラスを派生クラス(derived class)(別名:子クラス)と呼びます。
 例えば「ノートパソコン」を作成したいとします。ノートパソコンはコンピュータの一種なので、「コンピュータ」と「ノートパソコン」には多くの共通点がみえてきます。そのような場合、PHPでは既存の「Computerクラス」の機能を、ノートパソコンを表す「NotePcクラス」に継承させることができます。
 この継承の関係を例に当てはめると以下の関係になります。
 ・「Computer(コンピュータ)」クラス → 基本クラス(親クラス)
 ・「NotePc(ノートパソコン)」クラス → 派生クラス(子クラス)

図 10.1.1:クラスの親子関係

継承の主な特徴
 1)派生クラスはスーパークラスのフィールド変数とメソッドを受け継ぐ。
 2)コンストラクタは継承されない。コンストラクタはそのクラス固有のものになる。
 3)基本クラスのコンストラクタの明示的な呼び出しには parent:: を使う。
 4)クラスの継承は一度に1つしかできない。

図 10.1.2: クラスの継承イメージ

10.1.2 クラスを拡張する

 既存のクラスと共通する機能を持った新しいクラスを複数作成する場合、各クラスに共通する機能を全てのクラスでそれぞれ定義するよりも、共通する機能の部分を基本クラスとして作り、各クラス固有の機能を持った派生クラスで拡張(extends)し、基本クラスの機能を再利用する方が、プログラム効率が高まります。このように、基本クラスの機能を利用できるようにするための仕組みを「拡張(extends)」と呼びます。
 例えば前項で例にあげた「ノートパソコン」を作成したい場合、新しく「NotePcクラス」を作成する際にクラスを拡張(extends)して、既存の「Computerクラス」の機能を受け継ぐよう指定します。その結果、「Computerクラスの機能を継承したNotePcクラス」が作られます。

図 10.1.3: クラスの拡張イメージ
 上記の図が示すように、ノートパソコンクラスはコンピュータクラスを受け継ぎます。このため、コンピュータクラスにある機能(メンバ)を改めて作成する必要はありません。ノートパソコン独自の機能(メンバ)だけ作成すればよいことになるのです。

ポイント

・新しいクラスに既存のクラスの機能を利用できるようにする仕組みのことを「クラスの拡張」と呼び、機能を受け継ぐことを「継承」と呼ぶ。


NEXT>> 10.2 クラスを拡張する方法