今日も新しい問題でインタフェースの理解を深めていきましょう。
問題
次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。
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
型の配列にHuman
とCar
のオブジェクトが格納されており、for
文で配列を巡りながら、各オブジェクトのmove
メソッドを呼び出しています。
誤答理由
AやBを選んだ方は、それぞれのオブジェクトが全ての出力をカバーしていることを認識していない可能性があります。
Dを選んだ方は、単純に出力の順番を誤解した可能性があります。配列の順番に従って出力が行われる点が重要です。
つまずきポイント
インタフェースが持つメソッドを実装した際に、具体的な挙動に注目せず誤解しがちです。特に異なるクラスが同じメソッドを異なる形で実装することがある点を理解することは重要です。
また、配列やfor-each
ループを用いたオブジェクトの操作に慣れることも求められます。この仕組みによって複数の異なる動作を統一的に扱えるため応用が広がります。
発展知識
インタフェースはJavaの多態性を実現する重要な機能のひとつです。クラスの一貫性を保つと同時に、異なる具現を許容することから設計の柔軟性が増します。アノテーションを使って明示的にオーバーライドを示すこともコードの理解や保守性を向上させる要因となります。
さらに、Java8以降ではインタフェースにデフォルトメソッドを持たせることができるようになり、インタフェースの設計がより進化しました。このようなバージョンアップがどう影響するかを知っておくと良いでしょう。