MENU

【Java Silver】インタフェースの実装とオーバーライド

本日は、インタフェースとオーバーライドについての問題です。

問題

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

interface Vehicle {
                void start();
            }

            abstract class Motorized implements Vehicle {
                @Override
                public void start() {
                    System.out.println("Motorized starting");
                }
            }

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

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

選択肢

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

答えと解説

回答を見る

答え

B. Car starting

解説

解説のポイント:

  • インタフェースの実装とオーバーライド
  • 抽象クラスと具象クラス

まず、Javaのインタフェースの特性として、インタフェースは実装を持たず、クラスに実装されます。 ここではVehicleインタフェースにstartメソッドが定義され、それをMotorizedクラスが実装しています。このMotorizedクラスは抽象クラスですが、抽象化されるメソッドはありません。

次に、CarクラスがMotorizedクラスを継承し、startメソッドをオーバーライドしています。 そのため、CarクラスのインスタンスであるmyVehiclestartメソッドを呼び出すと、Carクラスのstartが実行され、「Car starting」と出力されます。

目次