web-dev-qa-db-ja.com

Javaの@Overrideとは何ですか?

可能性のある複製:
Javaの@Overrideアノテーションを使用するのはいつですか?

スーパークラスにそのメソッドがあることをコンパイラにチェックさせる以外に、メソッドに@Overrideアノテーションを付ける理由はありますか?

58
user65374

説明したように、@ Overrideはメソッドがオーバーライドされていることを示すコンパイル時チェックを作成します。これは、オーバーライドしようとしたときに愚かな署名の問題がないことを確認するのに非常に便利です。

たとえば、次のエラーが表示されました。

public class Foo {
  private String id;
  public boolean equals(Foo f) { return id.equals(f.id);}
}

このクラスは書かれたとおりにコンパイルされますが、@ Overrideタグをequalsメソッドに追加すると、Objectのequalsメソッドがオーバーライドされないため、コンパイルエラーが発生します。これは単純なエラーですが、ベテランの開発者の目からも逃れることができます

51
Rob Di Marco

コンパイラーをチェックするだけでなく、便利にするのに十分でしょう。また、開発者の意図を文書化します。

たとえば、メソッドをオーバーライドしても、型自体のどこからでも使用しない場合、後でコードにアクセスする人は、一体なぜそこにあるのかと疑問に思うかもしれません。注釈はその目的を説明しています。

23
Jon Skeet

いいえ、あなたはほとんどそれを釘付けしました。

@Overrideはコンパイラーにintentを伝えます:メソッド@Overrideにタグを付けた場合、スーパークラス(またはJavaのインターフェース)から何かをオーバーライドするつもりでした)。優れたIDEは、@Overrideなしでメソッドをオーバーライドするすべてのメソッドに役立つフラグを立てるので、この2つの組み合わせにより、目的の操作を確実に実行できます。

10
Michael Myers

nope-読みやすさも向上することを除いて(つまり、IDEが使用するインジケータに加えて、メソッドがスーパークラスの宣言をオーバーライドするのを簡単に見つけられます)

2
Rahel Lüthy