DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

13章47

まず、以下が基のクラス A です:

public class A {
    public Number test() {
        return 100;
    }
}
Enter fullscreen mode Exit fullscreen mode

A クラスの test メソッドは、戻り値の型が Number で、引数はありません。

選択肢 A

@Override
public Integer test() {
    return 0;
}
Enter fullscreen mode Exit fullscreen mode

説明:

  • NumberInteger の親クラスなので、IntegerNumber にキャスト可能です。
  • @Override アノテーションは、親クラスのメソッドを正しくオーバーライドしていることを示します。
  • 引数がなく、戻り値の型が親クラスの Number と互換性があるので、正しいオーバーライドです。

選択肢 B

@Override
public Number test(int num) {
    return num;
}
Enter fullscreen mode Exit fullscreen mode

説明:

  • メソッドのシグネチャ(引数の型と数)が異なります。親クラスの test メソッドは引数を取らないのに対し、こちらは int 型の引数を取ります。
  • 引数が異なるため、これはオーバーライドではなく、新しいメソッドの定義です。
  • @Override アノテーションがあるので、コンパイルエラーになります。

選択肢 C

@Override
public void test() {
    // do something
}
Enter fullscreen mode Exit fullscreen mode

説明:

  • 戻り値の型が void で、親クラスの Number 型とは異なります。
  • 戻り値の型が異なるため、これは正しいオーバーライドではありません。
  • @Override アノテーションがあるので、コンパイルエラーになります。

選択肢 D

public Number test() throws Exception {
    return 0;
}
Enter fullscreen mode Exit fullscreen mode

説明:

  • throws Exception は、メソッドが例外をスローする可能性があることを示しますが、親クラスの test メソッドにはこの宣言がありません。
  • オーバーライドする際に新たなチェック例外をスローすることはできません(親クラスのメソッドがその例外をスローしていない場合)。
  • @Override アノテーションがないため、シグネチャの一致は確認されませんが、コンパイルエラーになります。

まとめ

選択肢 A は、メソッドのシグネチャ(引数の型と数、戻り値の型)が親クラスの test メソッドと正しく一致しているため、正しいオーバーライドです。その他の選択肢(B, C, D)は、シグネチャが異なるか、戻り値の型が一致しないため、間違いとなります。

Top comments (0)