MENU

【Java Silver 試験】メソッドのオーバーロード、オーバーライドおよび隠蔽の区別

Java Silver試験範囲のオーバーロード、オーバーライド、隠蔽についての理解を深める問題です。

問題

次のコードが正しくコンパイルされ、実行された場合の出力を選択肢から選んでください。


class Vehicle {
    void honk() {
        System.out.println("Vehicle is honking");
    }
}

class Car extends Vehicle {
    @Override
    void honk() {
        System.out.println("Car is honking");
    }

    void honk(int volume) {
        System.out.println("Car is honking at volume: " + volume);
    }
}

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

選択肢

  • A. Vehicle is honking
  • B. Car is honking
  • C. Car is honking at volume: 0
  • D. コンパイルエラー
  • E. 実行時エラー

答えと解説

回答を見る

答え

B. Car is honking

解説

解説のポイント:

  • メソッドのオーバーロードとオーバーライドの違い
  • Javaのポリモーフィズムによる動作

この問題では、Javaにおけるメソッドのオーバーライドとオーバーロードの理解がキーとなります。

まず、オーバーライドとはスーパークラスのメソッドをサブクラスで再定義することです。今回、CarクラスはVehicleクラスのhonkメソッドをオーバーライドしています。

一方、オーバーロードは同一クラス内で引数の型や数が異なるメソッドを同じ名前で定義することです。Carクラスのhonk(int volume)はオーバーロードの例です。

さて、Vehicle型の変数myVehicleCarオブジェクトを指しています。この場合、オーバーライドされたCarクラスのhonkメソッドが呼び出され、「Car is honking」と出力されます。

つまずきポイント:

  • オーバーロードとオーバーライドの異なる概念を混同しないようにしましょう。
  • 実行時のポリモーフィズムにより、参照型が持つメソッドではなく、実際のオブジェクトのメソッドが呼び出されることを理解しましょう。

発展知識:

  • オーバーロードされたメソッドは静的な結合ですが、オーバーライドされたメソッドは動的結合です。これはJavaのポリモーフィズムの基本であり、オーバーライドされたメソッドは実際のオブジェクトインスタンスに基づいて決定されます。
  • メソッドのオーバーライドには@Overrideアノテーションを使うとコンパイル時にエラーチェックが強化され、スーパークラスのメソッドを正確にオーバーライドしていることを保証できます。
目次