【はじめてのJava】高度な設計【クラスの継承編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
クラスの継承編
クラスの継承編では、Javaを扱う上で重要な「クラスの継承」について扱っていきます。
前々回、前回でインタフェースを利用してある機能を共通化する方法を説明しました。
今回はより高度な設計について考察していきます。
なお、この内容はJava Silverよりも少し高度な内容です。
目次
クラスの設計
プログラムを作るときに、いきなりソースコードの作成を始めることはまずありません。通常はまずプログラムの全体像やクラスの設計図を考えます。
今回はプログラムを作成する際に使用するクラスの全体像を考えてみましょう。
全体像を考える
クラスの設計の記事などで、クラスを継承する場合の考え方を追いました。
また、鳥と飛行機の話を例に、インタフェースを用いて飛ぶという「機能」のみを共通化する方法を追いました。
これらを組み合わせることで、より高度な設計を考えることができます。
インタフェースと抽象クラスを組み合わせる
以前、猫とイヌと動物を例に抽象クラスを扱った時に、「動物の特徴をまとめたAnimalクラスを定義する際に、抽象クラスで定義することでAnimal自体のインスタンス化ができないようにする」という話をしました。
これと同じ感覚で、「フクロウ」クラスと「白鳥」クラスから「鳥」の概念(抽象クラス)として「Bird」クラスを作ります。
この際に、「Bird」に「Flyable」インタフェースを実装すると、「BirdすべてがFlyableを実装している」という形でクラスを設計することができます。
この状態で、「飛行機」を作りたい場合、例えば飛行機には直接「Flyable」を実装させるという方法をとることで、「鳥(という概念)」と「飛行機」を、継承関係はないけれどもともに「飛ぶ」ことができるクラスとして定義することが可能です。
このような方法をとると、以前ポリモフィズムで紹介したような、「配列やListを利用してまとめて管理する」ということができるようになります。
この例は説明用ですが、こういった形で「まとめて扱うことを考慮して設計していく」と、ソースコード全体がすっきりしていきます。
まとめ
具象クラス、抽象クラス、インタフェースを組み合わせるとすっきりした設計が可能になる。
はじめてのJavaシリーズの目次はこちら
クラスの継承編はこちら
【新作】Javaの復習問題シリーズはこちら
java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら