【はじめてのJava】ポリモフィズムの裏側【クラスの継承編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
クラスの継承編
クラスの継承編では、Javaを扱う上で重要な「クラスの継承」について扱っていきます。
前回までの記事で、ポリモフィズムの有用性を説明してきました。
今回はポリモフィズムの裏側を簡単に扱います。
目次
ポリモフィズムの裏側
以前の記事で、クラスの継承を目印にすることで、PoliceCarがCarの一種として扱えるという話をしました。
なぜこのような動作ができるのでしょうか。
以下のようなCarクラスとPoliceCarクラスが定義されている場合を考えてみましょう。
Carクラス
public class Car { public int speed; public String color; public void accell(){ this.speed += 10; } }
PoliceCarクラス
public class PoliceCar extends Car { public boolean isChasing; public void questioning(){ //省略 } }
PoliceCarはCarを継承しているため、Carとしても取り扱うことができます。
なぜこのようなことができるかというと、PoliceCarのインスタンスの内部に継承元であるCarのインスタンス部分を保持しているからです。
図にすると、以下のようなイメージです。
このようになっているため、PoliceCar内部のCarのインスタンス部分を利用すればCarとしての動作が実現できるのです。
このような背景があるため、PoliceCarクラスもCarクラスとして扱うことができるのです。
Car c1 = new Car(); c1.accell(); //☆ Car c2 = new PoliceCar(); c2.accell(); //★OK
まとめ
継承後のインスタンスの内部には親クラスの定義に基づいたインスタンスが内包されている
次回
次回はクラスの設計について考えてみます。
はじめてのJavaシリーズの目次はこちら
クラスの継承編はこちら