インタフェースの static メソッド
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
System.out.println(Util.name());
System.out.println(new Impl().name());
}
}
interface Util {
static String name() { return "util"; }
}
class Impl implements Util {
}
- A
utilが2回出力される - B
utilが1回出力される - C 実行時に例外が発生する
- D コンパイルエラーになる
正解と解説を見る
正解: D
- A: インタフェースの static メソッドは実装クラス経由で呼べないので、コンパイルエラーです。実行まで進まないので、何も出力されません。
- B: 実行まで進まないので、何も出力されません。
- C: コンパイルの時点でエラーになるので、実行時の例外にはなりません。
- D: インタフェースの static メソッドは継承されず、Util.name() の形でしか呼べません。new Impl().name() がコンパイルエラーになります。
ポイント
- インタフェースの static メソッドは
Util.name()のようにインタフェース名でしか呼べません。実装クラスには継承されません。