【はじめてのJava】クラスの継承と配列【クラスの継承編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
クラスの継承編
クラスの継承編では、Javaを扱う上で重要な「クラスの継承」について扱っていきます。
前回はポリモフィズムを扱いました。今回はポリモフィズムと配列を組み合わせて、整理方法を考えていきます。
目次
クラスの継承と配列
ポリモフィズムの考え方と、配列やCollection、Mapを組み合わせるととても柔軟なプログラムが書けるようになります。
例えば以下のようなCarクラス、PoliceCarクラス、Ambulanceクラスがあったとします。
Carクラス
public class Car { public int speed; public void accell(){ this.speed += 10; } }
PoliceCarクラス
public class PoliceCar extends Car { @Override public void accell(){ this.speed += 20; } }
Ambulanceクラス
public class Ambulance extends Car { @Override public void accell(){ this.speed += 5; } }
この時、「Carの配列」を作ると、その中に「PoliceCar」や「Ambulance」を入れることができます。
ソースコード
Car cars[] = { new PoliceCar(), new Car(), new Ambulance(), new PoliceCar()};
この時、accell()を使うと、実態に応じたaccell()が動きます。CarとPoliceCar、Ambulanceでaccell()の動きが違う場合、それぞれの内容に応じたaccellが動くわけです。
accell()を実行する際に、実体に応じてaccell()の使い方を変える必要はありません。すべてcars[i].accell()でアクセルを踏めます。
for(int i = 0; i < cars.length; i++){ cars[i].accell(); }
この考え方は配列だけでなく、「ListなどのCollection」「Map」などでも利用可能です。
ソースコード
今回のソースコードは以下です。すべてCarArrayMainクラスと同じフォルダに保存して実行してください。
Carクラス
public class Car { public int speed; public void accell(){ this.speed += 10; } }
PoliceCarクラス
public class PoliceCar extends Car { @Override public void accell(){ this.speed += 20; } }
Ambulanceクラス
public class Ambulance extends Car { @Override public void accell(){ this.speed += 5; } }
CarArrayMainクラス(動作確認用クラス)
public class CarArrayMain{ public static void main(String[] args){ Car cars[] = { new PoliceCar(), new Car(), new Ambulance(), new PoliceCar()}; for(int i = 0; i < cars.length; i++){ cars[i].accell(); } //以下動作確認用 for(Car c : cars){ System.out.println(c.speed); } } }
まとめ
ポリモフィズムを配列やCollection、Mapなどと組み合わせるとプログラムの柔軟性が上がる。
次回
次回は別の切り口でプログラムの設計について考えていきます。
はじめてのJavaシリーズの目次はこちら
クラスの継承編はこちら