// 3つのクラスのメソッドを呼び出し、新幹線の切符代を計算するクラス public class TicketChargeCalculation { public static void main(String[] args) { // 東京駅発の新幹線の切符の情報を管理するクラス (Ticket) の配列を宣言 Ticket[] ti = new Ticket[5]; int i, charge; String message; // Ticket クラスの 1 つ目のオブジェクトを作成し、行先と運賃、乗車券の種類をオブジェクトに設定 ti[0] = new Ticket(); ti[0].destination = "新大阪"; ti[0].charge = 14000; ti[0].type = "乗車券"; // Ticket クラスの 2 つ目のオブジェクトを作成し、行先と運賃、乗車券の種類をオブジェクトに設定 // ただし、乗車券は指定席券なので、ReservationTicket クラスのオブジェクトを作成し、フィールドの値を設定して、Ticket クラスのオブジェクトとして配列に代入 ReservationTicket reservation = new ReservationTicket(); reservation.destination = "名古屋"; reservation.charge = 10500; reservation.type = "指定席券"; reservation.reservedCharge = 500; ti[1] = reservation; // Ticket クラスの 3 つ目のオブジェクトを作成し、行先と運賃、乗車券の種類をオブジェクトに設定 // ただし、乗車券はグリーン席券なので、GreenTicket クラスのオブジェクトを作成し、フィールドの値を設定して、Ticket クラスのオブジェクトとして配列に代入 GreenTicket green = new GreenTicket(); green.destination = "博多"; green.charge = 22000; green.type = "グリーン席券"; green.greenCharge = 2000; ti[2] = green; // Ticket クラスの 4 つ目のオブジェクトを作成し、行先と運賃、乗車券の種類をオブジェクトに設定 ti[3] = new Ticket(); ti[3].destination = "京都"; ti[3].charge = 13000; ti[3].type = "乗車券"; // Ticket クラスの 5 つ目のオブジェクトを作成し、行先と運賃、乗車券の種類をオブジェクトに設定 ti[4] = new Ticket(); ti[4].destination = "広島"; ti[4].charge = 18500; ti[4].type = "乗車券"; // Ticket クラスの配列の個数は 5 つであり、5 つすべてにオブジェクトを設定したので、for 文を 5 回繰り返し for (i = 0; i < 5; i = i + 1) { // Ticket クラスで定義されている notifyTicket メソッド (行先と乗車券の種類の通知をするメソッド) を呼び出し // 配列 ti に設定されているオブジェクトが ReservationTicket または GreenTicket クラス (Ticket クラスの子クラス) でも、notifyTicket メソッドを継承しているので、呼び出し可能 message = ti[i].notifyTicket(); // Ticket クラスで定義されている getCharge メソッド (切符代を返すメソッド) を呼び出し // 配列 ti に設定されているオブジェクトが ReservationTicket または GreenTicket クラス (Ticket クラスの子クラス) の場合、getCharge メソッドをオーバーライドしているので、オーバーライドされたメソッドを呼び出し (ポリモーフィズム) charge = ti[i].getCharge(); System.out.println(message); System.out.println("この切符の値段は" + charge + "です。"); System.out.println(""); } } }