Developer

【はじめてのJava】子クラス独自の変数・メソッド【クラスの継承編】
2021.12.31
Lv1

【はじめてのJava】子クラス独自の変数・メソッド【クラスの継承編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


クラスの継承編

クラスの継承編では、Javaを扱う上で重要な「クラスの継承」について扱っていきます。

前回は子クラスの作り方を実践しました。

今回は子クラスである「PoliceCarクラス」に、独自の変数やメソッドを作成します。


目次


クラスの継承(実践)

前回、下の図のようなCarクラスとPoliceCarクラスを作成しました。

現状では、PoliceCarクラスはCarクラスと何ら変わりません。

そこで、PoliceCarクラスに変数やメソッドを追加し、下の図のようにします。

なお、前回作成したソースコードは以下の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クラスに変数とメソッドを追加していきましょう。

 


子クラスに変数やメソッドを定義する

子クラスに独自の変数やメソッドを追加する際も、普通のクラスに変数やメソッドを定義するときと何ら変わりません

今回は「追跡中かどうか」を表す変数「isChasing」と、職務質問するメソッド「questioning()」を定義しましょう。

PoliceCar.java

class PoliceCar extends Car{
  boolean isChasing; //追跡中ならtrue、それ以外はfalse
  void questioning(){ //とりあえず、Freeze!!(動くな!!)と表示
    System.out.println("Freeze!!");
  }
}

これで、PoliceCarクラス独自の変数とメソッドが追加できました。

 


PoliceCarクラスのイメージ

今回変数とメソッドを追加したPoliceCarクラスのイメージは、以下のようになります。

PoliceCarクラスから作成したインスタンスは、その内部にCarクラスのインスタンスを保持しているイメージです。

 


動作確認

では、改めて本当にPoliceCarクラスの動作を確認してみましょう。

PoliceDriveクラスを以下のようにします。
※questioning()メソッドが使えることが確認できれば動作確認としては十分なので、isChasingは利用していません。

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増加している

    panda.questioning(); //questioning()メソッドの動作を確認する

  }
}

これをコンパイル・実行すると以下のようになります。

 

「speed」や「accell()」だけでなく、新しく定義した「questioning()」も使えることが確認できました。

 


サンプルプログラム

今回作成したサンプルプログラムは以下の通りです。なお、3つのファイルは同じディレクトリに保存して動作を確認してください。

なお、Car.javaには手を加えていませんが、PoliceDriveクラスを実行するためにはCarクラスも必要になります。よくわからない場合は必ず同じディレクトリにCar.javaも保存しておいてください。

Car.java

class Car {
  double speed;
  String color;
  void accell(){
    this.speed += 10; //speedを10増加させる
  }
}

PoliceCar.java

class PoliceCar extends Car{
  boolean isChasing; //追跡中ならtrue、それ以外はfalse
  void questioning(){ //とりあえず、Freeze!!(動くな!!)と表示
    System.out.println("Freeze!!");
  }
}

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増加している

    panda.questioning(); //questioning()メソッドの動作を確認する

  }
}

まとめ

継承後のクラスに変数やメソッドを定義する場合も、普通のクラスに変数やメソッドを定義する場合と変わらない


次回

次回はPoliceCarクラスのaccell()メソッドについて扱います。


はじめてのJavaシリーズの目次はこちら
クラスの継承編はこちら


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら