😎

Javaのpolymorphismについて

2023/12/02に公開

概要

ポリモーフィズムとは、オブジェクト指向の考え方の一つで、一つの関数の呼び出しに対して、オブジェクトごとに異なる動作をすること。

例えば、乗り物クラスに「スピード」というメソッドがあるとする。そして、そのサブクラスには、車、飛行機、船がある。それぞれのサブクラスで「スピード」を実行すると、それぞれ異なる動作をする。これをポリモーフィズムという。

ハンズオン

実際に、デモ動作を行い、理解を深める。今回は、Vehicle、Car、Boat、Plane、Vehicle Testerというファイルを作成する。Vehicleという親クラスに対して、Car、Boat、Planeというサブクラスを作成し、VehicleTesterというファイルでテストをする。

Vehicle

ファイル内容は以下の通り。start、stop、speed、directionという4つの値を設定して、それらについてコンストラクタを実装する。そして、それぞれについて、start、stop、speed、directionが出力される関数を実装する。

package polymorphismExample;

public class Vehicle {
    protected String start;
    protected String stop;
    protected String speed;
    protected String direction;

    public Vehicle(String start, String stop, String speed, String direction) {
        this.start = start;
        this.stop = stop;
        this.speed = speed;
        this.direction = direction;
    }
    public void start() {
        System.out.println(start);
    }
    public void stop() {
        System.out.println(stop);
    }
    public void speed() {
        System.out.println(speed);
    }
    public void direction() {
        System.out.println(direction);
    }
}

Car / Boat / Plane

Car、Boat、Planeの中身は全て同じ。Vehicleから継承して、それに対して、どういった内容を出力するか、記載されている。

package polymorphismExample;

import inheritanceExample.Person;

public class Car extends Vehicle {
    public Car() {
        super("Car start", "Car stop", "Car speed", "Car direction");
    }
}
package polymorphismExample;

public class Boat extends Vehicle {
    public Boat() {
        super("Boat start", "Boat stop", "Boat speed", "Boat direction");
    }
}
package polymorphismExample;

public class Plane extends Vehicle {
    public Plane() {
        super("Plane start", "Plane stop", "Plane speed", "Plane direction");
    }
}

VehicleTester

最後に、VehicleTesterを設定する。まずは、3種類のVehicleタイプが格納される配列を作る。

package polymorphismExample;

public class VehicleTester {
    public static void main(String[] args) {
        Vehicle [] vehicles = new Vehicle[3];

そしたら、それぞれに対して、クラスを割り当てる。

        vehicles[0] = new Car();
        vehicles[1] = new Plane();
        vehicles[2] = new Boat();

割り当てたら、以下のようにloopをすることで、各vehicleのspeedが出力される。

        for (int i = 0; i < vehicles.length; i++) {
            Vehicle vehicle = vehicles[i];
            vehicle.speed();
        }
    }
}

出力結果は以下の通り。
Car speed
Plane speed
Boat speed

Discussion