MENU

【Java Silver】抽象クラスと実装の理解

本日は抽象クラスに関する問題に挑戦しましょう。

問題

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

abstract class Vehicle {
                abstract void start();
            }

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

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

選択肢

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

答えと解説

回答を見る

答え

B. Car is starting

解説

解説のポイント:

  • 抽象クラスとその目的
  • メソッドのオーバーライド
  • 実装クラスの役割

今回のプログラムでは、Vehicleという抽象クラスがあります。このクラスはメソッドstart()の具体的な動作を定義していません。

抽象クラスは「設計図」の役割を果たし、必ずしも具体的な動作を持つ必要はありません。代わりに、サブクラスで具体的な実装を持たせます。

たとえば、CarクラスはVehicleクラスを継承し、start()メソッドをオーバーライドしています。

プログラム内でVehicle型のmyVehicleCarオブジェクトを参照しています。この参照を通じてstart()メソッドを呼び出すとCarクラス側のオーバーライドされたstart()メソッドが実行されます。

そのため、「Car is starting」が出力されるという結果になっています。

目次