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 :

Problème polymorphisme - @Override


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Avril 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 277
    Par défaut Problème polymorphisme - @Override
    Bonsoir
    Je cherche à comprendre le polymorphisme Java et j'ai trouvé cet exemple sur le net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    package Fruit;
     
    public class Fruit {
        public void name(){
            System.out.println("C'est du fruit");
        }
    }
     
    class Orange extends Fruit {
        @Override
        public void name(){
            System.out.println("C'est de l'orange");
        }
    }
     
    class Pamplemousse extends Fruit{
        @Override
        public void name(){
            System.out.println("C'est du Pamplemousse");
        }
    }
    Et pour exécuter le code j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    package Fruit;
     
    public class ExecuteFruit {
     
        public static void main(String[] args) {
        Fruit fruit=new Fruit();
        Fruit or=new Orange();
        Fruit pamp=new Pamplemousse();
     
        fruit.name();
        or.name();
        pamp.name();
     
     
        }
    }
    L'exemple fonctionne bien ! Mais je l'ai testé en supprimant @Override et ça marche ! Où est le rôle d'@Override ?

    Merci pour l'aide.

  2. #2
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 326
    Billets dans le blog
    12
    Par défaut
    Bonsoir,


    Il existe plusieurs type de polymorphisme, pour ton exemple il s'agit là de polymorphisme d'inclusion.
    Sachant que les méthodes sont virtuelles par défaut en Java, l'annotation @Override sert surtout à :
    • A t'assurer que tu redéfinies bien une méthode (sinon le compilateur t'empêches de compiler)
    • Documenter ton code source


    Utilise cette annotation dès que tu peux.


    A+
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  3. #3
    Membre éclairé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Avril 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 277
    Par défaut
    Merci beaucoup Gugelhupf pour la réponse !
    Est ce que vous pouvez me donner un exemple le plus simple qu'il soit là où le terme @Override se révèle indispensable ! juste pour comprendre ! Merci !

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Il est à la fois

    - jamais indispensable, parce qu'on pourra toujours tout faire marcher sans lui

    - toujours indispensable, parce que le service qu'il rend est toujours meilleur que ne pas l'avoir, donc tu ne peux pas en avoir trop.

    Voici un exemple. Hier soir tu avais un peu bu et tu étais aussi fatigué, alors tu as tapé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Ananas extends Fruit {
        public void namme(){
            System.out.println("C'est de l'ananas");
        }
    }
    Et tu n'as pas vraiment trop bien testé parce que bon, il y en avais des dizaines à faire, alors c'était un peu vite.

    Malheureusement, la méthode namme() n'est jamais appelée et n'a aucun intérêt, et quand tu cherches à savoir le nom d'un Ananas, tu te chopes "C'est un fruit".
    La raison en est que la méthode namme() est là et bien là, mais elle ne redéfinit pas la méthode name(), bien qu'elle ne pouvait évidemment pas servir à autre chose. Comment c'est possible ? Parce que tu es juste un humain et que tu as fait une erreur, en tapant deux fois sur 'm' au lieu d'une.

    Mais alors, que faire ?? Toujours mettre @Override, notamment à ta méthode namme(). Le compilateur va alors te dire immédiatement que ta méthode namme() ne redéfinit rien du tout, donc, puisque tu dis que tu voulais redéfinir un truc, clairement tu t'es planté quelque part, toi pauvre humain.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 326
    Billets dans le blog
    12
    Par défaut
    @young077,

    Dis-toi aussi que les annotations sont apparues avec Java 5, ce qui n'a jamais empêché le langage d'avoir du polymorphisme d'inclusion avant.
    Idem pour d'autres langages tels que le C++ où le mot clé override n'est apparu qu'à partir de C++11, ce qui n'a jamais empêché le langage d'avoir du polymorphisme d'inclusion (à condition d'utiliser le mot-clé virtual par rapport à Java).
    Utiliser le mot-clé @Override sert à s'assurer qu'on redéfinit bien une méthode, c'est aussi se rendre service à soi-même où à ses collègues lors d'une relecture de code.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

Discussions similaires

  1. Problème Maven @Override
    Par Invité dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 07/07/2010, 16h07
  2. Problème avec @Override
    Par jiddou dans le forum JavaFX
    Réponses: 7
    Dernier message: 09/04/2010, 13h26
  3. Problème avec @Override
    Par Riasroc dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 14/12/2008, 18h43
  4. Réponses: 2
    Dernier message: 25/07/2004, 23h24
  5. Problème d'override...
    Par NeoMan dans le forum Langage
    Réponses: 6
    Dernier message: 10/03/2003, 14h21

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