2011-05-18 2 views
0

Im nouveau pour le développement android. Je voudrais savoir pourquoi devons-nous précéder chaque méthode surchargée avec l'annotation @Override dans android? En java régulier ce n'est pas une exigence.Question sur l'annotation @Override

S'il vous plaît Aide Merci

Répondre

4

La notation @Override est utilisée de sorte que le compilateur peut vous avertir si la méthode de signature n'est pas la même que la classe super méthode de signature. Il peut vous avertir des bugs fastidieux, et il n'est pas nécessaire sous Android, mais c'est une bonne pratique à la fois dans la programmation Java "normale" et dans la Programmation Android.

Si vous étiez en Java "normal", vous avez mal orthographié la méthode toString, par ex. public String toString(int n) {...} et vous avez eu le @Override le compilateur vous avertira parce que vous ne surchargez pas une méthode dans la superclasse.

+0

En fait, vous ne pouvez pas faire "public int toString() {...}" car le compilateur va lancer une erreur. L'erreur étant "essayant d'utiliser un type de retour incompatible". Mais si vous faites toString (int i) alors votre réponse est correcte. –

+0

@Amir: Oui, bien sûr mauvais exemple. Je vais le corriger, merci :) – LuckyLuke

0

Parce que c'est une bonne pratique de programmation. Surcharger une méthode sans utiliser @Override est un bogue potentiellement difficile à trouver dans le futur si la signature de la méthode de base change (j'ai déjà perdu des heures sur ce genre de bugs).

1

C'est une bonne pratique et c'est sûr. Supposons que vous avez une classe:

public class MyClass { 
    ... 
    ... 
    public void doSomething() { 
     ... 
     ... 
    } 
} 

Supposons maintenant que vous l'étendez:

public class MyExtendedClass extends MyClass { 
    ... 
    ... 
    public void doSomthing() { 
    ... 
    } 
} 

Ce code compilera, mais vous aurez des problèmes parce que vous avez en fait pas la méthode de substitution! Notez l'orthographe. Maintenant, si vous annoter avec @Override:

public class MyExtendedClass extends MyClass { 
    ... 
    ... 
    @Override 
    public void doSomthing() { 
    ... 
    } 
} 

Le compilateur java se plaindra parce que vous essayez de passer outre une méthode qui n'existe pas dans la classe de base. Essentiellement en utilisant @Override vous permet d'attraper des problèmes comme ceux-ci lors de la compilation.

Ceci est particulièrement utile lorsque vous refactorisez. Si vous modifiez une signature de méthode ou un nom, mais que vous ne possédez pas l'annotation @Override, certaines méthodes peuvent glisser, ce qui entraîne des bogues difficiles à trouver (bien sûr, avec les IDE modernes, une grande partie de cette douleur est atténuée, mais). Si vous utilisez judicieusement l'annotation @Override, vous obtiendrez maintenant des erreurs de compilation et vous pourrez donc corriger les signatures de méthode dans vos classes dérivées.

+0

Merci beaucoup! :) – Jim

+0

Ce code ne sera * pas * compilé car MyExtendedClass n'est pas abstrait et ne remplace pas doSomething(). – sarumont

+0

@sarumont Je viens de me rendre compte que ce matin. Stupide de moi. Je l'ai réparé. –