😎
Javaのpolymorphismについて
概要
ポリモーフィズムとは、オブジェクト指向の考え方の一つで、一つの関数の呼び出しに対して、オブジェクトごとに異なる動作をすること。
例えば、乗り物クラスに「スピード」というメソッドがあるとする。そして、そのサブクラスには、車、飛行機、船がある。それぞれのサブクラスで「スピード」を実行すると、それぞれ異なる動作をする。これをポリモーフィズムという。
ハンズオン
実際に、デモ動作を行い、理解を深める。今回は、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