継承と拡張について
1.1 継承と拡張について
これまでの章では、「コンピュータ」の機能をまとめた「Computerクラス」を利用して、プログラムを何度も作成してきました。この章ではさらに、既存の「Computerクラス」から新しいクラスを作成する方法を学習していきます。
1.1.1 クラスの継承とは
既存のクラスをもとに新しい別のクラスを作成し、既存のクラスの機能を受け継がせることを継承(inheritance)といいます。このとき、もとになる既存のクラスはスーパークラス(親クラス)、新しいクラスはサブクラス(子クラス)と呼ばれます。
例えば「ノートパソコン」を作成したいとします。ノートパソコンはコンピュータの一種なので、「コンピュータ」と「ノートパソコン」には多くの共通点がみえてきます。そのような場合、Javaでは既存の「Computerクラス」の機能を、ノートパソコンを表す「NotePcクラス」に継承させることができます。
この継承の関係を例に当てはめると以下の関係になります。
・ 「Computer(コンピュータ)」クラス → スーパークラス(親クラス)
・ 「NotePc(ノートパソコン)」クラス → サブクラス(子クラス)
図 1.1.1:クラスの親子関係
継承の主な特徴
1)サブクラスはスーパークラスのフィールド変数とメソッドを受け継ぐ。
2)コンストラクタは継承されない。コンストラクタはそのクラス固有のものになる。
3)スーパークラスのコンストラクタの明示的な呼び出しには super() を使う。
4)クラスの継承は一度に1つしかできない。継承したいクラスが複数あったとしても、Javaでは一度に1つのスーパークラスしか継承することはできない。
図 1.1.2: クラスの継承イメージ
1.1.2 クラスの拡張とは
既存のクラスと共通する機能を持った新しいクラスを複数作成する場合、各クラスに共通する機能を全てのクラスで定義するよりも、共通する機能の部分をスーパークラスとして作り、各クラス固有の機能をもったサブクラスで拡張(extends)し、スーパークラスの機能を再利用する方が、プログラム効率が高まります。このように、スーパークラスの機能を利用できるようにするための仕組みを「拡張(extends)」と呼びます。
例えば前項で例にあげた「ノートパソコン」を作成したい場合、新しく「NotePcクラス」を作成する際にクラスを拡張(extends)して、既存の「Computerクラス」の機能を受け継ぐよう指定します。その結果、「Computerクラスの機能を継承したNotePcクラス」が作られます。
図 1.1.3: クラスの拡張イメージ
上記の図が示すように、ノートパソコンクラスはコンピュータクラスを受け継ぎます。このため、コンピュータクラスにある機能(メンバ)は作成する必要がありません。ノートパソコン独自の機能(メンバ)だけ作成すればよいことになるのです。
ポイント
- 新しいクラスに既存のクラスの機能を利用できるようにする仕組みのことを「クラスの拡張」と呼び、機能を受け継ぐことを「継承」と呼ぶ。