【Effective Java】項目36:常に Override アノテーションを利用する
@Override アノテーション
Java 1.5 でいくつかのアノテーションがライブラリに追加されましたが、最も重要なのは @Override アノテーションです。 @Override アノテーションはスーパークラスのメソッドをオーバーライドしていることを示します。
public class Example { @Override // => Object.equals() をオーバーライドしていることを示す public boolean equals(Object o) { ... 省略 ... } }
@Override アノテーションが付けられているのに、実際にはオーバーライドしていない場合にはコンパイルエラーとなります。
たとえば、equals() をオーバーライドしようとしているのに、引数を間違って Object 以外にしてしまうなどの場合に有用です。
public class Example { @Override // => 引数を間違えてオーバーライドしていないので、コンパイルエラーになる public boolean equals(Example e) { ... 省略 ... } }
また、逆にオーバーライドするつもりがないのに意図せずオーバーライドしてしまう場合には IDE が警告を出してくれる場合があります。
public class Parent { private String name; public String getName() { return name; } } public class Child extends Parent { private String name; public String getName() { // => 意図せぬ Override?意図するなら @Override をつけるべき return name; } }
例外として抽象クラスの抽象メソッドをオーバーライドする場合や、インタフェースの宣言を実装する場合には @Override をつける必要はありません。
もちろん、つけても害はありませんので、意図を明確にするために @Override をつける方がよい場合が多いです。