【はじめてのJava】クラスの継承時の注意点【クラスの継承編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
クラスの継承編
クラスの継承編では、Javaを扱う上で重要な「クラスの継承」について扱っていきます。
前回は、抽象クラスを使う理由を説明してきました。
今回はクラスを継承する際の注意点を扱います。なお、この内容はJava Silverよりも少し高度な内容です。
目次
クラスの設計
プログラムを作るときに、いきなりソースコードの作成を始めることはまずありません。通常はまずプログラムの全体像やクラスの設計図を考えます。
今回はクラスを継承する際の注意点を考えてみます。
継承時の注意点
前回まででクラスの抽象化を行い親クラスを定義する方法を扱いました。
今回も同様に、クラスの抽象化を行った後、クラスの継承時の注意点を考えてみます。
まずは「Owl」クラスと「Swan」クラスを基に抽象化してみましょう。
それぞれのクラスには「飛ぶ」メソッドと「着地」メソッドがあります。
抽象化を行うと、「飛ぶ」メソッドと「着地」メソッドを持った「Bird」クラスを定義可能です。
問題は、この後です。
追加でクラスを定義する
「飛ぶ」「着地」という2つのメソッドを持った「Bird」クラスが定義できました。
そこへ、もう一つ「Airplane」クラスが必要になったとします。
この「Airplane」クラスは特徴として「飛ぶ」し「着地」もできます。
では、「Airplane」クラスはどう定義すればよいでしょうか。
やってはいけない方法
ここで単純に考えれば、「Bird」を継承して「Airplane」を定義すればよい、となりがちです。
しかしこの方法はやってはいけません。なぜなら、こうしてしまうと、「飛行機は鳥の一種」ということになります。
このように、「フィールド」や「メソッド」が共通していても、「まとめて扱うとおかしくなるもの」については継承して作成してはいけません。
このような設計を行ってしまうと、ソースコードを作成しているうちに訳が分からなくなり、バグに繋がります。
まとめ
クラスの継承時には「まとめて扱うとおかしくなるもの」については継承で作成してはいけない。
次回
次回もクラスの設計について考えてみます。
はじめてのJavaシリーズの目次はこちら
クラスの継承編はこちら