はじめに
今回はクラスについて自分で勉強したことを活かして作成したプログラムを解説してみようと思います。
解釈が違っている点やアドバイスがあればご教授頂けると幸いです。
プログラム概要
乗り物を表す親クラスVehicle、バスを表すBusクラス、電車を表すTrainクラス、タクシーを表すTaxiクラスを定義する。Busクラス、Trainクラス、TaxiクラスはVehicleクラスを継承している。また、停車を表すStoppableインターフェースを定義し、BusとTaxiにのみ実装する。そしてtest.javaファイルで全クラスの挙動を確かめる。
全クラス、のコードは以下に示す。
全プログラムのコード
Vehicle
public class Vehicle {
protected int passenger_num;
public void setPassenger_num(int passenger_num){
this.passenger_num = passenger_num;
}
public int getPassenger_num(){
return this.passenger_num;
}
public void display(){
System.out.println("乗客数 : " + this.passenger_num);
}
}
Vehicleは乗客数を表すpassenger_numフィールドを持っている。
また、passenger_numのgetter、setterである、getPassenger_numとsetPassenger_numメソッドを持っている、そして乗客数を画面に表示するdisplayメソッドを持っている。
Bus
public class Bus extends Vehicle implements Stoppable {
public Bus(int passenger_num){
this.passenger_num = passenger_num;
}
public void stop(){
System.out.println("停車しました。");
}
}
Train
public class Train extends Vehicle {
public Train(int passenger_num){
this.passenger_num = passenger_num;
}
}
Taxi
public class Taxi extends Vehicle implements Stoppable {
public Taxi(int passenger_num){
this.passenger_num = passenger_num;
}
public void stop(){
System.out.println("停車しました。");
}
@Override
public void display(){
System.out.println("タクシーの乗客数 : " + this.passenger_num);
}
}
Bus、Train、TaxiはVehicleを継承しており、Vehicleが持つフィールド、メソッドを持っている。また、これら3つのクラスはインスタンス化をする際に呼び出されるコンストラクタが定義されており、int型の引数passenger_numに値を設定して呼び出すことで、インスタンス化と同時に乗客数passenger_numが設定できるようになっている。また、TaxiのみVehicleのdisplayメソッドをオーバーライドしている。これによりTaxiのdisplayメソッドを呼び出したときはBusやTrainのときとは違う挙動をするはずである。
Stoppable
public interface Stoppable {
public void stop();
}
停車機能を表すStoppableはBusとTaxiのみ実装しているインターフェースである。Stoppableの中には、停車したことを画面に表示する、stopメソッドが定義されている。
test.java
public class test {
public static void main(String[] args) {
Vehicle[] vehicle = new Vehicle[3];
vehicle[0] = new Bus(10);
vehicle[1] = new Train(11);
vehicle[2] = new Taxi(2);
for(int i = 0; i < vehicle.length; i++){
vehicle[i].display();
}
}
}
test.javaで上記のクラスを使っている。まず、Vehicleクラスの配列vehicleを定義し、それぞれの要素にBus、Train、Taxiクラスのインスタンスを格納している。(親クラスのインスタンスに子クラスのインスタンスを代入することをアップキャストというらしい。)またインスタンス化する際に、コンストラクタにint型の引数を設定することにより、乗客数を設定している。
そしてfor文による繰り返し処理でBus、Train、Taxiのdisplayメソッドを呼び出している。
実行結果を以下に示す。
乗客数 : 10
乗客数 : 11
タクシーの乗客数 : 2
上記の実行結果により、コンストラクタで値が設定できていることがわかる。
また、オーバーライドしたTaxiのdisplayメソッドのみ他の2つとは挙動が違う。
終わりに
最後まで見て頂き、ありがとうございます。
この春からエンジニアとして仕事をすることになったのでその勉強のアウトプットとして定期的にQiitaに投稿しようと思います。
アドバイス等ありましたら、ご教授して頂けると幸いです。