実装メソッドの public を忘れる
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
new Fast().run();
}
}
interface Runner {
void run();
}
class Fast implements Runner {
void run() { System.out.println("run"); }
}
- A
runと出力される - B 実行時に例外が発生する
- C コンパイルエラーになる
- D 何も出力されない
正解と解説を見る
正解: C
- A: インタフェースのメソッドを public なしで実装しているので、コンパイルエラーです。実行まで進まないので、何も出力されません。
- B: コンパイルの時点でエラーになるので、実行時の例外にはなりません。
- C: インタフェースの抽象メソッドは暗黙に public です。実装側で修飾子なし (より狭いアクセス) にするとコンパイルエラーになります。
- D: コンパイルエラーなので実行できません。
ポイント
- インタフェースの抽象メソッドは暗黙的に public です。実装側に public を付けないとアクセスが狭くなるのでコンパイルエラーです。