IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Définition exacte de @Override [Débat]


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut Définition exacte de @Override
    Salut,

    L'annotation @Override doit être utilisée lorsqu'une méthode redéfinit la méthode de la superclasse, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Override public boolean equals(Object other) {...}
    Par contre, qu'en est-il lorsqu'une classe implémente une interface? Est-ce que la sémantique de @Override indique que la méthode est "overridée" (on peut considérer que oui, car par exemple la javadoc de la méthode dans l'interface est héritée).

    Citation Envoyé par Javadoc
    Indicates that a method declaration is intended to override a method declaration in a superclass.
    Donc a priori ça devrait être utilisé aussi pour l'implémentation...

    Pour information, @Override génère une erreur dans ce cas (pour les méthodes implémentées d'une interface) dans Java 5, mais pas dans Java 6...

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Citation Envoyé par Javadoc pour la SE 6.0
    Indicates that a method declaration is intended to override a method declaration in a superclass. If a method is annotated with this annotation type but does not override a superclass method, compilers are required to generate an error message.
    Je n'ai pas testé @Override sur une classe qui implémente une interface, mais selon la doc, ça devrait générer une erreur puisque dans un cas pareil la condition énoncée dans la doc (en rouge) est réalisée !

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 159
    Par défaut
    Mais si on peut utiliser @Override.
    Faut considérer une interface comme une classe complétement abstraite, c'est à dire que toutes les méthodes sont abstraites.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public interface TestInt {
        public void test();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Test implements TestInt{
        @Override
        public void test(){
             //code...
        }
    }

  4. #4
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Citation Envoyé par yannart
    Faut considérer une interface comme une classe complétement abstraite
    Dans ce cas, @Override n'a aucun sens puisque on ne redéfinit pas la méthode en question, mais on l'implémente ! Donc personellement, et indépendament du fait que le compilateur l'accepte ou pas, je considère qu'utiliser @Override dans une classe qui implémente une interface sémantiquement erroné ! (A moins qu'on ajoute une annotation du genre @Implement )

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 159
    Par défaut
    Dans ce cas, @Override n'a aucun sens puisque on ne redéfinit pas la méthode en question, mais on l'implémente ! Donc personellement, et indépendament du fait que le compilateur l'accepte ou pas, je considère qu'utiliser @Override dans une classe qui implémente une interface sémantiquement erroné ! (A moins qu'on ajoute une annotation du genre @Implement )
    Je pense qu'ajouter une annotation comme @Implement n'a pas vraiment d'intérêt vu que quelquefois on se fiche de savoir si on implémente une interface ou une classe. C'est vrai qu'avec les interfaces on implémente une méthode mais l'intérêt d'@Override est le même: ça te permet d'être sur que tu redéfinit ou implémente une méthode du père et que n'en définit pas une nouvelle.

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Moi je trouverais ça bien pratique car je fais la javadoc sur toutes les méthodes, sauf bien sûr si elle est déjà documentée dans l'interface... Ça permet de voir rapidement si une méthode n'a pas de javadoc parce qu'elle est implémentée, ou parce que c'est un oubli...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Chef de projet / définition exacte ?
    Par lorang dans le forum CV
    Réponses: 9
    Dernier message: 13/06/2011, 22h19
  2. Définition exacte du malloc ?!
    Par Endori dans le forum Débuter
    Réponses: 6
    Dernier message: 10/02/2011, 15h13
  3. La définition exacte de Flex
    Par maserati dans le forum Flex
    Réponses: 1
    Dernier message: 19/04/2010, 17h00
  4. Réponses: 5
    Dernier message: 17/05/2006, 11h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo