web-dev-qa-db-ja.com

Javaで抽象メソッドを実装するときに@Overrideアノテーションを追加する必要がありますか?

Javaで非仮想メソッドをオーバーライドする場合は、@Overrideアノテーションを使用することをお勧めしますが、抽象メソッドを実装するとどうなりますか? @Overrideも使用する必要がありますか?

51
Eyvind

この場合、私は@Overrideの使用を好む傾向があります。これにより、スーパークラスが変更された場合(メソッドを完全に削除するか、そのシグネチャを変更するなど)、メソッドにサブクラスのフラグが付けられます。

唯一の本当の違いは、アノテーションがない場合、スーパークラス/インターフェイスのメソッドが変更または削除された場合、問題の実装は単にそのクラスの「通常の」メソッドになることです。したがって、コントラクトを履行するためだけにメソッドを実装する場合は、アノテーションを追加する必要があります。実装されたインターフェースや継承された抽象メソッドに関係なく、クラスでメソッドが意味をなす場合は、おそらく追加しないでください。

68
Andrzej Doyle

はい-繰り返しますが、「ここでメソッドをオーバーライドしたいのですが、対応するメソッドが存在する場合はないオーバーライドするので、間違いを犯したので、そのことを伝えたいと思います。それ!"

個人的には、これが言語の一部ではなく単なる注釈であるのは残念だと思います(C#の場合のように)が、もちろん、それは後知恵の利点です。

21
Jon Skeet

はい。効果的なJavaのJoshuaBlochによる推奨プラクティスです。

14
mR_fr0g

実際、Joshua Blochは、178ページの最後の段落でEffective Java(2nd Ed。))で、抽象をオーバーライドする具象クラスのメソッドには必須ではないと述べています。コンパイラはとにかくエラーを出すので、Overrideアノテーションを使用するメソッド。ただし、「そうしても害はありません」。

戦略を選択し、それを一貫して維持することをお勧めします。

6
Mark