1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

javaのクラスを使ってプログラムを書いてみた。

Posted at

はじめに

今回はクラスについて自分で勉強したことを活かして作成したプログラムを解説してみようと思います。
解釈が違っている点やアドバイスがあればご教授頂けると幸いです。

プログラム概要

乗り物を表す親クラスVehicle、バスを表すBusクラス、電車を表すTrainクラス、タクシーを表すTaxiクラスを定義する。Busクラス、Trainクラス、TaxiクラスはVehicleクラスを継承している。また、停車を表すStoppableインターフェースを定義し、BusTaxiにのみ実装する。そして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_numsetPassenger_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);
    }
}

BusTrainTaxiVehicleを継承しており、Vehicleが持つフィールド、メソッドを持っている。また、これら3つのクラスはインスタンス化をする際に呼び出されるコンストラクタが定義されており、int型の引数passenger_numに値を設定して呼び出すことで、インスタンス化と同時に乗客数passenger_numが設定できるようになっている。また、TaxiのみVehicledisplayメソッドをオーバーライドしている。これによりTaxidisplayメソッドを呼び出したときはBusTrainのときとは違う挙動をするはずである。

Stoppable

public interface Stoppable {
    public void stop();
}

停車機能を表すStoppableBusTaxiのみ実装しているインターフェースである。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を定義し、それぞれの要素にBusTrainTaxiクラスのインスタンスを格納している。(親クラスのインスタンスに子クラスのインスタンスを代入することをアップキャストというらしい。)またインスタンス化する際に、コンストラクタにint型の引数を設定することにより、乗客数を設定している。
そしてfor文による繰り返し処理でBusTrainTaxidisplayメソッドを呼び出している。
実行結果を以下に示す。

乗客数 : 10
乗客数 : 11
タクシーの乗客数 : 2

上記の実行結果により、コンストラクタで値が設定できていることがわかる。
また、オーバーライドしたTaxidisplayメソッドのみ他の2つとは挙動が違う。

終わりに

最後まで見て頂き、ありがとうございます。
この春からエンジニアとして仕事をすることになったのでその勉強のアウトプットとして定期的にQiitaに投稿しようと思います。
アドバイス等ありましたら、ご教授して頂けると幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?