MENU

【Java Silver】クラスの定義とインスタンスの理解

本日はプログラム構造に関する問題を解きましょう。

問題

次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。

class Vehicle {
    String type = "Vehicle";

    void displayType() {
        System.out.println("Type: " + type);
    }
}

class Car extends Vehicle {
    String type = "Car";

    @Override
    void displayType() {
        System.out.println("Type: " + type);
    }
}

public class Main {
    public static void main(String[] args) {
        Vehicle myVehicle = new Car();
        myVehicle.displayType();
    }
}

選択肢

  • A. Type: Vehicle
  • B. Type: Car
  • C. コンパイルエラー
  • D. 実行時エラー

答えと解説

回答を見る

答え

B. Type: Car

解説

解説のポイント:

  • メソッドのオーバーライド
  • フィールドのシャドウイング

Javaでは、サブクラスがスーパークラスのメソッドをoverride(上書き)することができます。これは、親クラスの機能を拡張したり、特定の動作を持たせるために使われます。

このプログラムでは、VehicleクラスのdisplayTypeメソッドが、Carクラスによってオーバーライドされています。このため、Carクラスのインスタンスから呼び出された場合、そのオーバーライドされたメソッドが実行されます。

一方、フィールドについてはメソッドとは異なり、「シャドウイング」という概念が適用されます。シャドウイングとは、サブクラスのフィールドが同じ名前のスーパークラスのフィールドを隠してしまうことです。しかし、ここではmyVehicle.displayType()CarクラスのdisplayTypeメソッドが実行されるため、フィールドtypeCarクラスのものになります。

したがって、プログラムを実行すると、「Type: Car」と出力されます。

目次