web-dev-qa-db-fra.com

À quoi sert @Override en Java?

Duplicata possible:
Quand utilisez-vous l'annotation @Override de Java et pourquoi?

Y a-t-il une raison d'annoter une méthode avec @Override autre que de demander au compilateur de vérifier que la superclasse possède cette méthode?

58
user65374

Comme vous le décrivez, @Override crée une vérification au moment de la compilation qu'une méthode est remplacée. Ceci est très utile pour vous assurer que vous n'avez pas de problème idiot de signature lorsque vous essayez de remplacer.

Par exemple, j'ai vu l'erreur suivante:

public class Foo {
  private String id;
  public boolean equals(Foo f) { return id.equals(f.id);}
}

Cette classe se compile telle qu'écrite, mais l'ajout de la balise @Override à la méthode equals provoquera une erreur de compilation car elle ne remplace pas la méthode equals sur Object. C'est une simple erreur, mais elle peut même échapper à l'œil d'un développeur expérimenté

51
Rob Di Marco

Cela ne fait pas que vérifier le compilateur - bien que ce soit suffisant pour le rendre utile; il documente également l'intention du développeur.

Par exemple, si vous remplacez une méthode mais ne l'utilisez pas n'importe où dans le type lui-même, quelqu'un qui viendra au code plus tard peut se demander pourquoi diable elle est là. L'annotation explique son objectif.

23
Jon Skeet

Non, vous l'avez pratiquement cloué.

@Override indique au compilateur votre intention: si vous balisez une méthode @Override, vous aviez l'intention de remplacer quelque chose de la superclasse (ou de l'interface, dans Java 6). Un bon IDE signalera utilement toute méthode qui remplace une méthode sans pour autant @Override, donc la combinaison des deux vous permettra de faire ce que vous essayez de faire.

10
Michael Myers

non - sauf qu'il améliore également la lisibilité (c'est-à-dire en plus de tout indicateur que votre IDE utilise, il est facile de repérer qu'une méthode remplace une déclaration dans la superclasse)

2
Rahel Lüthy