Siempre debe anotar métodos con @Override
si está disponible.
En JDK 5, esto significa anular métodos de superclases, en JDK 6 y 7 significa anular métodos de superclases e implementar métodos de interfaces. La razón, como se mencionó anteriormente, es que permite que el compilador detecte errores donde cree que está anulando (o implementando) un método, pero en realidad está definiendo un nuevo método (firma diferente).
El ejemplo equals(Object)
vs. equals(YourObject)
es un ejemplo estándar, pero se puede hacer el mismo argumento para implementaciones de interfaz.
Me imagino que la razón por la que no es obligatorio anotar la implementación de métodos de interfaces es que JDK 5 marcó esto como un error de compilación. Si JDK 6 hiciera esta anotación obligatoria, rompería la compatibilidad con versiones anteriores.
No soy un usuario de Eclipse, pero en otros IDEs (IntelliJ), la @Override
anotación solo se agrega al implementar métodos de interfaz si el proyecto se configura como un proyecto JDK 6+. Me imagino que Eclipse es similar.
Sin embargo, hubiera preferido ver una anotación diferente para este uso, tal vez una @Implements
anotación.