【はじめてのJava】ポリモフィズム【クラスの継承編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
クラスの継承編
クラスの継承編では、Javaを扱う上で重要な「クラスの継承」について扱っていきます。
前回に引き続き、今まで出てきた内容を基に、クラスの整理方法を考えていきます。
目次
ポリモフィズム
前回、クラスの継承を目印にしてPoliceCarがCarの一種であると捉えるという話をしました。
public class PoliceCar extends Car{ //Carクラスを継承しているのでCarの一種 //省略 }
この時、「Car」クラスで定義したaccell()メソッドを「PoliceCar」クラスでオーバーライドする場合を考えます。
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; } }
PoliceCarクラスもCarクラスの一種なので、以下のようなプログラムが書けます。
Car c1 = new Car(); c1.accell(); //☆ Car c2 = new PoliceCar(); c2.accell(); //★
この時のaccell()の動きに注目してみます。
c1は見た目も実体もCarクラスです。そのため☆では「Car」クラスのaccell()が動き、speedは10増加します。
一方でc2は「見た目はCarで実体はPoliceCar」となっています。そのため、★ではCarクラスとしてaccell()を動かしていますが、「PoliceCar」でオーバーライドされたaccell()が動くため、speedは20増加します。
このように、「同じメソッド名で動作は実体に合わせる」ことを ポリモフィズム と言います。
オーバーロード(同名メソッドの複数定義)もオーバーライド(継承後のクラスでのメソッドの上書き)もポリモフィズムを実現するための仕組みです。
ポリモフィズムを利用すると、柔軟なプログラムを書くことができます。
まとめ
同名のメソッドで動作が変わることをポリモフィズムという
ポリモフィズムを利用すると柔軟なプログラムが書ける
次回
次回はポリモフィズムと配列を組み合わせた例を考えてみます。
はじめてのJavaシリーズの目次はこちら
クラスの継承編はこちら