As others noted, the @Override annotation is really a compiler directive that instructs javac scream if the method annotated with @Override does not actually override the method in its parent class (for example, you are actually overloading because you decided to change the signature method or skip method name).
In JDK 5, the direct implementation of a method from an interface is not considered to override this method and is considered an error if annotated using @Override .
Partly due to user feedback that this was a really confusing behavior, JDK 6 changed this behavior and considers it appropriate to annotate the method that you implement from the interface with @Override .
source share