回答を見る
答え
B. The car is driving
解説
この問題では、Javaにおけるポリモーフィズムの概念が試されています。
基本説明
Javaでは、サブクラスのオブジェクトをスーパークラスの型で参照することができ、これを「ポリモーフィズム」と呼びます。ポリモーフィズムを使うことで、同じ型の変数が様々な種類のオブジェクトを指すことが可能になります。
コードでは、`Vehicle`クラスの`myVehicle`変数は`Car`クラスのインスタンスを指しています。`move`メソッドが呼ばれたとき、実際にはオーバーライドされた`Car`クラスの`move`メソッドが実行されます。
誤答理由
選択肢Aの「The vehicle is moving」を選んでしまった場合は、オーバーライドの動作を誤解している可能性があります。
Javaのオーバーライドでは、コンパイル時ではなく、実行時のオブジェクトの型に基づいてメソッドが選択されます。
つまずきポイント
ポリモーフィズムの理解が曖昧だと、「どのクラスのメソッドが実行されるのか」を見誤ることが多いです。
Javaのポリモーフィズムでは、オブジェクトの実際のクラスに依存してメソッドが選択されます。このため、変数の型ではなくオブジェクトの型に注意を払う必要があります。
発展知識
ポリモーフィズムに関連して、インターフェースを使用した動作についても理解を深めることが大切です。
例えば、複数のクラスが共通のインターフェースを実装している場合、インターフェース型の変数で各クラスのインスタンスを参照することができ、非常に柔軟な設計が可能となります。これにより、オープン/クローズド原則(Open/Closed Principle)を満たすコードを書くことができます。
今回は、Javaのポリモーフィズムと参照型のキャストに関連する問題です。
問題
次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。
class Vehicle {
void move() {
System.out.println("The vehicle is moving");
}
}
class Car extends Vehicle {
@Override
void move() {
System.out.println("The car is driving");
}
}
class Bicycle extends Vehicle {
void move() {
System.out.println("The bicycle is riding");
}
}
public class Main {
public static void main(String[] args) {
Vehicle myVehicle = new Car();
myVehicle.move();
}
}
選択肢
- A. The vehicle is moving
- B. The car is driving
- C. The bicycle is riding
- D. コンパイルエラー
答えと解説
回答を見る
答え
B. The car is driving
解説
この問題では、Javaにおけるポリモーフィズムの概念が試されています。
基本説明
Javaでは、サブクラスのオブジェクトをスーパークラスの型で参照することができ、これを「ポリモーフィズム」と呼びます。ポリモーフィズムを使うことで、同じ型の変数が様々な種類のオブジェクトを指すことが可能になります。
コードでは、`Vehicle`クラスの`myVehicle`変数は`Car`クラスのインスタンスを指しています。`move`メソッドが呼ばれたとき、実際にはオーバーライドされた`Car`クラスの`move`メソッドが実行されます。
誤答理由
選択肢Aの「The vehicle is moving」を選んでしまった場合は、オーバーライドの動作を誤解している可能性があります。
Javaのオーバーライドでは、コンパイル時ではなく、実行時のオブジェクトの型に基づいてメソッドが選択されます。
つまずきポイント
ポリモーフィズムの理解が曖昧だと、「どのクラスのメソッドが実行されるのか」を見誤ることが多いです。
Javaのポリモーフィズムでは、オブジェクトの実際のクラスに依存してメソッドが選択されます。このため、変数の型ではなくオブジェクトの型に注意を払う必要があります。
発展知識
ポリモーフィズムに関連して、インターフェースを使用した動作についても理解を深めることが大切です。
例えば、複数のクラスが共通のインターフェースを実装している場合、インターフェース型の変数で各クラスのインスタンスを参照することができ、非常に柔軟な設計が可能となります。これにより、オープン/クローズド原則(Open/Closed Principle)を満たすコードを書くことができます。