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