Partage
  • Partager sur Facebook
  • Partager sur Twitter

Le polymorphisme

besoin d'aide

Sujet résolu
    16 avril 2009 à 13:07:53

    bonjour,
    S.V.P quelqu'un peu m'aide, j'ai pas comprends la notion de polymorphisme, et pour être plus exacte, comment la JVM peut faire la déférence quand on fait l'appelle à une méthode polymorphe que cette dernière est de la classe de base ou bien de la classe hérité?
    par exemple: on a 2 classe (ville et capitale), la classe ville est la classe de base, et capitale est une classe hérité de ville, et on a une méthode de description d'objet qu'elle est dans les 2 classe (méthode polymorphe), alors si on crée un objet ville et on fait appel a cette méthode ( et on saie que l'objet ville peut être capitale "covariance des variables"), donc comment jvm choisé la bonne méthode de description (ville ou bien capitale)?
    merci d'avance :)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 avril 2009 à 13:23:58

      ParentClass pc = new ParentClass();
      pc.doThat(); //appel de la méthode du parent
      ParentClass cc = new ChildClass();
      cc.doThat(); //appel de la méthode de l'enfant
      


      La jvm se base sur le type instancié.
      • Partager sur Facebook
      • Partager sur Twitter
        16 avril 2009 à 13:36:27

        En effet, la JVM se base sur le type instancier. La théorie est la même que pour les interfaces. Tu peux définir un Objet en disant qu'il est du type de l'interface qu'il implémente. Si tu utilises une méthode proposée par cette interface sur l'objet, l'implémentation de l'objet sera utilisé.

        Comment est codé la JVM pour gérer ça, je n'en ai aucune idée, mais ça marche comme ça. Le type que tu donnes à ta variable te permet d'accéder au fonction de ce type.

        Par exemple, si tu fais :
        Ville foo = new Capitale();
        foo.getInfo();
        foo.methodeDeCapitaleNonPresenteDansVille();
        

        La JVM ne va pas accepter la deuxième ligne car l'Objet Ville ne propose pas cette méthode. En revanche, il va bien executer le getInfo de l'objet Capitale et non Ville (sauf bien sûr si la méthode n'est pas surchargée).
        • Partager sur Facebook
        • Partager sur Twitter
          16 avril 2009 à 14:57:24

          merci bien,
          je suis d'accord avec shakal, et j'ai bien comprends ça, mais le problème que j'ai trouvé c'est que par exemple j'ai un tableau de ville et dans ce tableau je peu bien sûr inséré des capitale "covariance des variable" et pour la désinscription des éléments de tableau je peu utilisé ce code:
          for(Ville v : tableau){
          System.out.println(v.decrisToi()+"\n");
          }
          donc comment la jvm peut faire la déférence entre les ville et le capitales?
          merci d'avance
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            16 avril 2009 à 15:09:22

            simplement parce que la jvm connait le type que tu as utilisé lors de l'instanciation (ou d'un cast d'une autre variable, c'est le même).
            • Partager sur Facebook
            • Partager sur Twitter
              16 avril 2009 à 15:39:56

              merci bien shakal j'ai bien comprendre le polymorphisme.
              • Partager sur Facebook
              • Partager sur Twitter
                16 avril 2009 à 18:33:16

                On appelle ça le "Dynamic Binding" ou "Late binding". Lorsqu'une méthode d'instace est appelée, la machine virtuelle va d'abord chercher pour cette méthode dans la classe immédiate, la classe la plus basse dans l'arbre. Si elle n'y trouve pas la méthode recherchée, elle remonte à la classe mère et cherche encore. La JVM va remonter dans la hierarchie des classes tant qu'elle n'a pas trouvé la méthode, jusqu'à la classe Object. Le compilateur s'assure toujours que la méthode utilisée existe quelque part dans la hierarchie des classes, donc on finira toujours par la trouver en remontant lors de l'exécution.
                • Partager sur Facebook
                • Partager sur Twitter

                Le polymorphisme

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown