L'annotation @Override indique au compilateur qu'une méthode donnée est la redéfinition d'une méthode de la superclasse.
Exemple :
public class Singe { public void mangerBananes(int nb) { ... } ... } class Babouin extends Singe { @Override public void mangerBananes(int nb) { ... } // redéfinition ... }
En plus de rappeler au programmeur qu'il s'agit de la redéfinition d'une méthode de la superclasse, la présence de l'annotation @Override va forcer le compilateur à vérifier que la méthode a été redéfinie correctement.
Dans l'exemple suivant le programmeur a fait une erreur dans le nom de la méthode (oublie de la lettre "s"), erreur qui sera détectée par le compilateur qui ne trouvera pas la méthode correspondante dans la superclasse.
public class Singe { public void mangerBananes(int nb) { ... } ... } class Babouin extends Singe { @Override public void mangerBanane(int nb) { ... } // n'est pas une redéfinition ... }
Sortie :
C:\>javac Exemple.java Exemple.java:8: error: method does not override or implement a method from a supertype @Override ^ 1 error C:\>
Il s'agit donc d'une bonne habitude à prendre que de faire précéder de l'annotation @Override toutes les méthodes redéfinies. Dans notre exemple, si l'annotation n'avait pas été là la compilation aurait réussi. En conséquence, l'appel à la méthode "mangerBananes" d'une instance de Babouin aurait résulté par l'exécution de la méthode "mangerBananes" de la classe Singe, puisque "mangerBananes" (avec un "s" à la fin) n'existe pas dans la classe Babouin!