【はじめてのJava】クラスの継承(実践)【クラスの継承編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
クラスの継承編
クラスの継承編では、Javaを扱う上で重要な「クラスの継承」について扱っていきます。
前回はクラスの継承方法や親クラス、子クラスについて触れました。
今回は実際にCarクラスを継承した「PoliceCarクラス」を作成します。
目次
クラスの継承(実践)
前回クラスの継承の方法を扱ったので、今回は実際にクラスの継承を実践してみましょう。
今回の記事ではまず、下の図の状態を目指します。
上記が完成したら、次回の記事で改めて下の図の状態を目指します。
では早速クラスの継承を実践していきましょう。
親クラス(Carクラス)
まずは親クラスとなるCarクラスを定義します。なお、本来はコンストラクタなども定義するべきですが、ソースコードが長くなったり、追加で説明すべき事柄が出てきて煩雑な感じが出てしまうため、今回は図の通りの構成とします。
Car.java
class Car { double speed; String color; void accell(){ this.speed += 10; //speedを10増加させる } }
これでCarクラスは完成です。
子クラス(PoliceCarクラス)
続けて子クラスとなるPoliceCarクラスを定義します。
冒頭でも書いた通り、まずは下の状態を目指します。
実は、この状態で良ければ、ソースコードはとても短く済みます。さっそく書いてみましょう。
PoliceCar.java
class PoliceCar extends Car{ }
なんと、これだけです。一見すると、PoliceCarクラスには変数もメソッドも全く入っていないように見えます。
しかし、PoliceCarクラスはCarクラスを継承して定義されています。そのため、PoliceCarクラスはCarクラスの変数とメソッドを内包している状態になっています。
そのことを確認しましょう
子クラスの動作を確かめる
では、本当にPoliceCarクラスにCarクラスの変数やメソッドが内包されているのか、mainメソッドを保持したPoliceDriveクラスを定義して確認してみましょう。
PoliceDrive.java
public class PoliceDrive{ public static void main(String[] args){ PoliceCar panda = new PoliceCar(); panda.speed = 0.0; System.out.println(panda.speed); panda.accell(); //accellを踏んでspeedを10増加させる System.out.println(panda.speed); //pandaのspeedが10増加している } }
これをコンパイル・実行すると以下のようになります。
確かにPoliceCarクラスでも「speed」や「accell()」が使えることが確認できました。
サンプルプログラム
今回作成したサンプルプログラムは以下の通りです。なお、3つのファイルは同じディレクトリに保存して動作を確認してください。
Car.java
class Car { double speed; String color; void accell(){ this.speed += 10; //speedを10増加させる } }
PoliceCar.java
class PoliceCar extends Car{ }
PoliceDrive.java
public class PoliceDrive{ public static void main(String[] args){ PoliceCar panda = new PoliceCar(); panda.speed = 0.0; System.out.println(panda.speed); panda.accell(); //accellを踏んでspeedを10増加させる System.out.println(panda.speed); //pandaのspeedが10増加している } }
次回
次回は実際にPoliceCarクラスに変数やメソッドを足していきます。
はじめてのJavaシリーズの目次はこちら
クラスの継承編はこちら