MENU

【Java Silver】Local Variable Typeとインタフェースの使用

Local Variable Typeとインタフェースを用いた問題を解いてみましょう。

問題

以下のコードを実行した際に出力される結果を選択肢から選んでください。

interface Flyable {
    String fly();
}

class Bird implements Flyable {
    @Override
    public String fly() {
        return "Flying high!";
    }
}

public class Main {
    public static void main(String[] args) {
        var myBird = new Bird(); // Local Variable Type
        System.out.println(myBird.fly());
    }
}

選択肢

  • A. Flying high!
  • B. コンパイルエラー
  • C. 実行時エラー
  • D. 無限ループ

答えと解説

回答を見る

答え

A. Flying high!

解説

基本説明:

今回はJavaのローカル変数型推論(Local Variable Type Inference)とインタフェースの実装について説明します。

Java 10以降ではvarキーワードが導入されました。

これは、ローカル変数の型を明示的に記述する代わりに、コンパイラーに推論させる仕組みです。

このコードではvar myBirdBird型のインスタンスを受け取っており、その推論結果はBird型となります。

また、Flyableインタフェースにはflyメソッドが定義されており、Birdクラスがそれを実装しています。

したがって、myBird.fly()Flying high!を出力します。

誤答理由:

もし B. コンパイルエラーを選んだ場合、それはvarの使い方に誤解がある可能性があります。

今回は正しくBirdクラスのインスタンスがvar変数に保存されているので、コンパイルエラーは発生しません。

つまずきポイント:

varを使用する場合、初期化子が必須です。

このため、varを使ったローカル変数の定義は必ず何らかの値で初期化しなければなりません。

また、varによって推論された型は、そのブロック内で不変となります。

発展知識:

Javaのvarキーワードは便利ですが、過度に使うことによって型の意図が不明確になる場合があります。

特に複雑なコードでは可読性の観点から注意が必要です。

Flyableインタフェースは、実際には抽象メソッドを定義するために使われ、このメソッドを具体的なクラスで実装することで、ポリモーフィズムを活用する場面が増えます。

目次