今回は、サブクラスとスーパークラスに関する問題を解いてみましょう。
問題
次のプログラムでは、クラスの継承によるメソッドの呼び出しを行っています。出力結果として正しい選択肢を選んでください。
class Vehicle {
void move() {
System.out.println("Vehicle is moving");
}
}
class Car extends Vehicle {
@Override
void move() {
System.out.println("Car is fast");
}
}
public class Road {
public static void main(String[] args) {
Vehicle vehicle = new Car();
vehicle.move();
}
}
選択肢
- A. Vehicle is moving
- B. Car is fast
- C. コンパイルエラー
- D. 実行時エラー
答えと解説
回答を見る
答え
B. Car is fast
解説
この問題ではJavaの継承とポリモーフィズムに関する内容が問われています。
基本説明:
Javaのオブジェクト指向プログラミングでは、継承はクラス間で共通の機能を共有しやすくするための機能です。
Vehicle
クラスは基本的なメソッドmove()
を持っており、サブクラスであるCar
がこのメソッドをオーバーライドしています。
オーバーライドとは、スーパークラスのメソッドをサブクラスで再定義することを指します。
誤答理由:
選択肢Aの誤解は、オブジェクトがスーパークラス型で定義されているために、スーパークラスのメソッドが呼ばれると思いやすい点です。
ポリモーフィズムにより、実際のオブジェクトの型Car
のメソッドが呼び出されます。
つまずきポイント:
変数型と実際のオブジェクト型の違いが理解できていないと、どのメソッドが呼ばれるのかを誤解しやすいです。
ここで重要なのは、実際に作成されたオブジェクトがCar
型であるため、Car
のmove()
が使用されるということです。
発展知識:
オーバーライドによってポリモーフィズムが発生します。
ポリモーフィズムでは、スーパークラス型の変数がサブクラスのオブジェクトを指すことができ、実際のオブジェクトのメソッドが呼び出されます。
この特性によって柔軟なコードの再利用と拡張が可能になります。