@Override の付いたメソッド
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
System.out.println(new B().name());
}
}
class A {
String name() { return "A"; }
}
class B extends A {
@Override
String name(String prefix) { return prefix + "B"; }
}
- A
Aと出力される - B
nullBと出力される - C 実行時に例外が発生する
- D コンパイルエラーになる
正解と解説を見る
正解: D
- A: @Override の付いたメソッドが何もオーバーライドしていないので、コンパイルエラーです。実行まで進まないので、何も出力されません。
- B: 実行まで進まないので、何も出力されません。
- C: コンパイルの時点でエラーになるので、実行時の例外にはなりません。
- D: name(String) は引数が違うので、A の name() のオーバーライドではなくオーバーロードです。@Override が付いているのでコンパイルエラーになります。
ポイント
@Overrideを付けると、本当にオーバーライドになっているかをコンパイラが確認します。- 引数が違うメソッドはオーバーロードなので、@Override を付けるとコンパイルエラーです。