はじめに
今回はクラスについて自分で勉強したことを活かして作成したプログラムを解説してみようと思います。
解釈が違っている点やアドバイスがあればご教授頂けると幸いです。
プログラム概要
乗り物を表す親クラス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に投稿しようと思います。
アドバイス等ありましたら、ご教授して頂けると幸いです。