56

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

4

4 に答える 4

79

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

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

于 2009-06-17T08:56:13.533 に答える
23

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

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

于 2009-06-17T08:56:34.610 に答える
16

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

于 2009-06-17T08:56:26.343 に答える
6

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

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

于 2010-01-05T10:32:21.710 に答える