Javaで非仮想メソッドをオーバーライドする場合は、@Override
アノテーションの使用をお勧めしますが、抽象メソッドを実装するとどうなりますか?その時も使うべき@Override
ですか?
4 に答える
私はこの場合の使用を好む傾向がある@Override
ので、スーパークラスが変更された場合(メソッドを完全に削除するか、そのシグネチャを変更するなど)、サブクラスでメソッドにフラグが付けられます。
唯一の本当の違いは、アノテーションがない場合、スーパークラス/インターフェイスのメソッドが変更または削除された場合、問題の実装は単にそのクラスの「通常の」メソッドになることです。したがって、コントラクトを実行するためだけにメソッドを実装する場合は、アノテーションを追加する必要があります。実装されたインターフェースや継承された抽象メソッドに関係なく、クラスでメソッドが意味をなす場合は、おそらく追加しないでください。
はい-繰り返しになりますが、「ここでメソッドをオーバーライドしたいのです。オーバーライドする対応するメソッドがない場合は、間違いを犯したので、そのことを伝えたいのです!」
個人的には、これが言語の一部ではなく単なる注釈であるのは残念だと思います(C#の場合のように)が、もちろん、それは後知恵の利点です。
はい。効果的なJavaのJoshuaBlochによる推奨プラクティスです。
実際、Joshua Blochは、Effective Java(2nd Ed。)の178ページの最後の段落で、抽象メソッドをオーバーライドする具象クラスのメソッドがOverride
アノテーションを使用することは必須ではないと述べています。コンパイラーはとにかくエラーを出すからです。ただし、「そうすることは有害ではありません」。
戦略を選択し、それを一貫して維持することをお勧めします。