本日は、インタフェースとオーバーライドについての問題です。
問題
次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。
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
クラスのインスタンスであるmyVehicle
がstart
メソッドを呼び出すと、Car
クラスのstart
が実行され、「Car starting」と出力されます。