web-dev-qa-db-fra.com

Que signifie @Override?

public class NaiveAlien extends Alien
{

    @Override
    public void harvest(){}

}

J'essayais de comprendre le code de mon ami et je n'obtiens pas la syntaxe, @Override dans le code. Qu'est-ce que cela fait et pourquoi avons-nous besoin de codage? Merci.

71
Woong-Sup Jung

C'est un conseil pour le compilateur de lui faire savoir que vous redéfinissez la méthode d'une classe parente (ou d'une interface dans Java 6).

Si le compilateur détecte qu'il n'y a IS aucune fonction à remplacer, il vous en avertira (ou une erreur).

Ceci est extrêmement utile pour identifier rapidement les fautes de frappe ou les modifications de l'API. Supposons que vous essayez de remplacer la méthode harvest() de votre classe parente, mais que vous l'épelliez harvset(), votre programme appellera la classe de base en mode silencieux, et sans @Override, Vous ne le feriez pas. N'avoir aucun avertissement à ce sujet.

De même, si vous utilisez une bibliothèque et que dans la version 2 de celle-ci, harvest() a été modifié pour prendre un paramètre entier, vous ne le remplacez plus. Encore une fois, @Override Vous le dirait rapidement.

126
EboMike

Cette fonctionnalité s'appelle une annotation. @Override est la syntaxe consistant à utiliser une annotation pour que le compilateur sache, "hé compilateur, je modifie ce que la récolte fait dans la classe parente", le compilateur peut immédiatement dire: "mec, vous le nommez de manière incorrecte". Le compilateur ne compilera pas jusqu'à ce que vous le nommiez correctement.

Donc, sans cela @Override annotation, le compilateur ne commettra aucune erreur et sera considéré comme une nouvelle déclaration de méthode. Il serait difficile de reconnaître l'erreur à ce stade.

27
nitin1706

@Override _ signifie que vous substituez la méthode de la classe de base. En Java6, cela signifie également que vous implémentez une méthode à partir d’une interface. Il vous protège des fautes de frappe lorsque vous pensez qu’une méthode est prioritaire, mais que vous avez mal saisi quelque chose.

9
fastcodejava