MENU

【Java Silver】サブクラスとスーパークラスの作成と使用

今回は、サブクラスとスーパークラスに関する問題を解いてみましょう。

問題

次のプログラムでは、クラスの継承によるメソッドの呼び出しを行っています。出力結果として正しい選択肢を選んでください。

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型であるため、Carmove()が使用されるということです。

発展知識:

オーバーライドによってポリモーフィズムが発生します。
ポリモーフィズムでは、スーパークラス型の変数がサブクラスのオブジェクトを指すことができ、実際のオブジェクトのメソッドが呼び出されます。

この特性によって柔軟なコードの再利用と拡張が可能になります。

目次