MENU

【Java Silver 試験】インタフェースの作成と実装 学習内容

今日も新しい問題でインタフェースの理解を深めていきましょう。

問題

次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。

interface Movable {
    void move();
}

class Human implements Movable {
    public void move() {
        System.out.println("Walking");
    }
}

class Car implements Movable {
    public void move() {
        System.out.println("Driving");
    }
}

public class Test {
    public static void main(String[] args) {
        Movable[] movables = {new Human(), new Car()};
        for (Movable movable : movables) {
            movable.move();
        }
    }
}

選択肢

  • A. Walking
  • B. Driving
  • C. Walking Driving
  • D. Driving Walking

答えと解説

回答を見る

答え

C. Walking Driving

解説

解説のポイント:

  • インタフェースの実装
  • 配列と繰り返し処理

基本説明

このプログラムは、インタフェースMovableを実装したクラスが登場します。HumanクラスとCarクラスはそれぞれmoveメソッドを具体的に実装しており、それぞれが異なる動作を行います。

メインメソッドではMovable型の配列にHumanCarのオブジェクトが格納されており、for文で配列を巡りながら、各オブジェクトのmoveメソッドを呼び出しています。

誤答理由

ABを選んだ方は、それぞれのオブジェクトが全ての出力をカバーしていることを認識していない可能性があります。

Dを選んだ方は、単純に出力の順番を誤解した可能性があります。配列の順番に従って出力が行われる点が重要です。

つまずきポイント

インタフェースが持つメソッドを実装した際に、具体的な挙動に注目せず誤解しがちです。特に異なるクラスが同じメソッドを異なる形で実装することがある点を理解することは重要です。

また、配列やfor-eachループを用いたオブジェクトの操作に慣れることも求められます。この仕組みによって複数の異なる動作を統一的に扱えるため応用が広がります。

発展知識

インタフェースはJavaの多態性を実現する重要な機能のひとつです。クラスの一貫性を保つと同時に、異なる具現を許容することから設計の柔軟性が増します。アノテーションを使って明示的にオーバーライドを示すこともコードの理解や保守性を向上させる要因となります。

さらに、Java8以降ではインタフェースにデフォルトメソッドを持たせることができるようになり、インタフェースの設計がより進化しました。このようなバージョンアップがどう影響するかを知っておくと良いでしょう。

目次