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 myBird
がBird
型のインスタンスを受け取っており、その推論結果はBird
型となります。
また、Flyable
インタフェースにはfly
メソッドが定義されており、Bird
クラスがそれを実装しています。
したがって、myBird.fly()
はFlying high!
を出力します。
誤答理由:
もし B. コンパイルエラー
を選んだ場合、それはvar
の使い方に誤解がある可能性があります。
今回は正しくBird
クラスのインスタンスがvar
変数に保存されているので、コンパイルエラーは発生しません。
つまずきポイント:
var
を使用する場合、初期化子が必須です。
このため、var
を使ったローカル変数の定義は必ず何らかの値で初期化しなければなりません。
また、var
によって推論された型は、そのブロック内で不変となります。
発展知識:
Javaのvar
キーワードは便利ですが、過度に使うことによって型の意図が不明確になる場合があります。
特に複雑なコードでは可読性の観点から注意が必要です。
Flyable
インタフェースは、実際には抽象メソッドを定義するために使われ、このメソッドを具体的なクラスで実装することで、ポリモーフィズムを活用する場面が増えます。