【はじめてのJava】クラスを拡張する【クラスの継承編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
クラスの継承編
クラスの継承編では、Javaを扱う上で重要な「クラスの継承」について扱っていきます。
前回まででオブジェクトとクラスの様々な内容について扱いました。
今回からは作成した「クラス」を拡張していく方法を扱います。
目次
クラスを拡張する
オブジェクトとクラス編では、都度クラスを作成しながら説明してきました。これでも問題ないと言えば問題ありません。
しかし、もしも「あるクラスの属性と機能をすべて内包した別のクラスを作りたい」となったらどうでしょうか。
「Carクラス」と「Carクラスの属性と機能すべて内包したPoliceCarクラス」を例に詳しく見てみましょう。
クラスの拡張が無い場合
まずはクラスの拡張が無い場合を考えてみましょう。
もし、クラスの拡張が無い場合、「Carクラス」と「PoliceCarクラス」をそれぞれ0から作る必要があります。
単純に「コピー&ペーストすればよい」と考えるかもしれません。しかし、その方法で問題ないのでしょうか。
コピー&ペーストで作った際の問題点
「Carクラス」と「PoliceCarクラス」をコピー&ペーストで作成した場合、ソースコードの管理上いくつかの問題が考えられます。
ソースコードを更新し忘れる可能性
コピー&ペーストで作成した2つのクラスに、共通した変更を加えたい場合には、両方のクラスを編集する必要があります。
一見すると問題なさそうですが、この方法ではどちらか一方を変更し忘れる可能性が出ます。
同じ要領で「Taxiクラス」「Truckクラス」「FireEngineクラス」「Ambulanceクラス」・・・と、たくさんのクラスを作成した場合まで考えると、管理がとてつもなく大変になることは容易に想像できます。
共通部分と独自部分が識別しづらくなる
コピー&ペーストで作成した2つのクラスのうち、片方だけ変更を加えたい場合を考えます。
この場合、一見すると問題点が無いように思えるかもしれません。しかしどこからどこまでが共通部分でどこからどこまでが独自部分なのか識別が困難になります。
例えば「PoliceCarには別のフィールドやメソッドを追加したい」という場合は、どこからがCarクラスと同じ内容でどこがPoliceCarクラス独自の内容なのか、区別が困難です。
目視でできると思った方もいるかもしれませんが、共通部分が1000行あると思えば、そう考えたら現実的でないことは容易に想像できます。
クラスを拡張できる場合
こういった点から、Carクラスを基にしてPoliseCarクラスを作成することができたほうが良さそうです。
Javaでは既存のクラスを基に拡張したクラスを作成する方法があります。
例えば、Carクラスの属性や機能をすべて内包したPoliceCarを作成するような場合は、Carクラスを拡張して作成することが可能です。
まとめ
あるクラスの属性や操作をすべて内包したクラスを作る場合は既存のクラスを拡張すれば良い。
次回
次回はクラスの拡張について、もう少し詳しく見ていきます。
はじめてのJavaシリーズの目次はこちら
クラスの継承編はこちら