今日も一緒に問題を解いて、Java Silver試験への理解を深めましょう。
問題
以下のコードを実行した場合の結果を選択してください。
class Vehicle {
void move() {
System.out.println("Vehicle is moving");
}
}
class Car extends Vehicle {
@Override
void move() {
System.out.println("Car is accelerating");
}
}
public class Main {
public static void main(String[] args) {
Vehicle vehicle = new Car();
Car car = (Car) vehicle;
car.move();
}
}
選択肢
- A. Vehicle is moving
- B. Car is accelerating
- C. コンパイルエラー
- D. 実行時エラー
答えと解説
回答を見る
答え
B. Car is accelerating
解説
解説のポイント:
- オーバーライドの仕組み
- キャストの理解
- ポリモーフィズム
Javaのオーバーライドとは、サブクラスがスーパークラスのメソッドを再定義することです。
ポリモーフィズムにおいて、オブジェクトがスーパークラス型の場合でも、サブクラスのオーバーライドされたメソッドが実行されます。
この問題では、Vehicle
型の変数vehicle
がCar
オブジェクトを指しており、Car
クラスのmove
メソッドがオーバーライドされています。
さらに、キャストによってvehicle
はCar
型のcar
として参照されます。
このため、car.move()
が呼び出されると、Car
クラスのmove
メソッドが実行され、「Car is accelerating」と出力されます。
発展知識
ポリモーフィズムとキャストを応用すると、他のサブクラスが増えてもスーパークラスを通じて同様の処理が行えるため、コードの柔軟性が上がります。
キャストは必ず成功するとは限らず、安全性を確保するためにインスタンスが実際にどのクラスに属しているかを確認するinstanceof
演算子の使用も検討されます。
この演算子は、オブジェクトが指定されたクラスまたはそのサブクラスのインスタンスであるかどうかを確認します。