【はじめてのJava】鳥と飛行機をまとめるには【クラスの継承編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
クラスの継承編
クラスの継承編では、Javaを扱う上で重要な「クラスの継承」について扱っていきます。
前回は、鳥と飛行機を例に、継承して作成するとおかしくなる場合はクラスの継承してはいけない、という説明をしました。
ですが、「鳥」も「飛行機」も「飛ぶ」という機能は共通しています。今回は、このような場合にどう設計すればいいのか、見ていきましょう。
なお、この内容はJava Silverよりも少し高度な内容です。
目次
クラスの設計
プログラムを作るときに、いきなりソースコードの作成を始めることはまずありません。通常はまずプログラムの全体像やクラスの設計図を考えます。
今回はクラスを継承する際の注意点を考えてみます。
鳥と飛行機の実装を考える
前回、鳥と飛行機を例に、「フィールド」や「メソッド」が共通していても、「まとめて扱うとおかしくなるもの」については継承して作成してはいけない、と説明しました。
この2つには「飛ぶ」「着地する」という共通点がありますが、完全に別々のものとして作らなければいけないのでしょうか。
考察してみましょう。
クラス単位での継承
改めて、クラスとして継承するとどうなるか考えてみましょう。
なお、話を簡単にするためにクラスは「フクロウ」と「飛行機」の2つ、メソッドは「飛ぶ」メソッドのみで考えていきます。
このように、フクロウと飛行機にともに飛ぶメソッドがあったとします。
前々回までの抽象化の考え方を使うと、「飛ぶというメソッドを持った共通の 親クラス を作ればいいということになります。
しかし、この考え方で実装すると、「飛行機は鳥」とか「フクロウは飛行機」という、わけがわからないことになってしまいます。
本来継承はプログラムをすっきりさせたり、柔軟性を持たせるために行いますが、これでは継承すればするほど訳が分からなくなってしまいますね。
では、どうすればいいのでしょうか。
機能のみを共通化する
改めて、フクロウと飛行機について見てみましょう。
フクロウは羽ばたいて飛びます。
飛行機はエンジンで飛び、燃料を消費します。
このように、2つのクラスでは「飛ぶ」という機能は共通していても、その内容は異なります。
逆に言えば、「飛ぶという機能」に注目してみた場合は、両方ともに「飛ぶ」ことができる、ということです。
言い方を変えれば、「飛ぶ」という「機能」のみを共通化すればいいことになります。
このような場合に使うのが「 インタフェース 」です。
インタフェースで機能を共通化する
インタフェースはある「機能」が備わっていることを示すものです。
言い方を変えると、「インタフェース」を実装させれば、クラスを継承させなくてもその機能だけを共通化することができます。
このような方法で、「機能だけ」を共通化することもできるのです。
まとめ
ある「機能」だけを共通化したい場合は「インタフェース」を実装する形で実現する。
次回
次回もクラスの設計について考えてみます。
はじめてのJavaシリーズの目次はこちら
クラスの継承編はこちら
【新作】Javaの復習問題シリーズはこちら
java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら