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 :

Polymorphisme qui change les arguments des méthodes


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Points : 21
    Points
    21
    Par défaut Polymorphisme qui change les arguments des méthodes
    Bonjour pouvez m'expliquer ce polymorphisme avec type en augment au méthode:
    voila 3 classes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package poly;
     
    abstract class A {
     
        public void affiche(double r) {
     
            System.out.println("Je suis dans A nbr est " + r);
        }
     
        public void affiche() {
     
            System.out.println("Je suis dans A ");
        }
    }

    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
    package poly;
     
    public class B extends A {
     
        public void affiche(long l) {
     
            System.out.println("Je suis dans B et nbr est " + l);
     
        }
     
        public void affiche() {
     
            System.out.println("Je suis dans B ");
     
        }
    }
    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
    package poly;
     
    public class C extends A {
     
        public void affiche(int d) {
     
            System.out.println("Je suis dans c et nbr est " + d);
        }
     
        public void affiche() {
     
            System.out.println("Je suis dans c  ");
        }
     
    }

    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
    23
    package poly;
     
    public class Main {
     
        public static void main(String[] args) {
     
            // A a = new A();
            B b = new B();
            C c = new C();
            int i = 7;
            double d = 5.4555;
            long l = 25555655;
     
            c.affiche(i);
            System.out.println("************* a=c**********");
            A a;
            a = new C();// a est un C????
            a.affiche(i);// pourquoi c'est la méthode de A qui est appelée  et d'après le sous casting implicite ça doit êtres la méthode de C ??
            a.affiche();
     
        }
     
    }
    affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Je suis dans c et nbr est 7
    ************* a=c**********
    Je suis dans A nbr est 7.0          (1)
    Je suis dans c
    je comprends pas la ligne (1) on devrait avoir "Je suis dans c et nbr est 7" on a la meme méthode dans chaque classe
    avec agument type différent

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par kaul128 Voir le message
    je comprends pas la ligne (1) on devrait avoir "Je suis dans c et nbr est 7" on a la meme méthode dans chaque classe avec agument type différent
    Si c'est des arguments de type différent, alors ce n'est pas la même méthode.

    L'une prend un double, l'autre un long, la dernière un int. Ce ne sont pas les mêmes, donc ça ne peut être appelé de la même façon, donc ces méthodes ne peuvent pas se remplacer les unes les autres, donc ce ne sont pas les mêmes.
    Dans ce cas, ces méthodes n'ont rien à voir les unes avec les autres. Et ce n'est pas du polymorphisme. On appelle ça de la surcharge : des méthodes qui ont le même nom, mais qui n'ont aucun lien les unes avec les autres.

    La variable a est de type A. A est une classe, qui ne possède que deux méthodes : affiche(double) et affiche().
    Donc en demandant à appeler une méthode de la variable a, tu ne peux appeler que l'une de ces deux méthodes.
    Ici c'est celle qui prend un paramètre qui est appelée : affiche(double), et il y a conversion implicite du int i vers double.

    À propos du polymorphisme :
    - Quand tu appelles a.affiche(), tu demandes la méthode sans paramètre du type A. Mais ta variable a contient une instance de C, c'est possible puisque C est un sous-type de A.
    Il se trouve que la classe C redéfinit la méthode affiche() sans paramètre. C'est donc la méthode de la classe C qui est appelée et non pas celle de la classe A. C'est ce qu'on appelle le polymorphisme.

    - Quand tu appelles a.affiche(i), tu demandes la méthode affiche(double) du type A. Ta variable contient une instance de C, et la classe C ne redéfinit pas la méthode affiche(double). Comme C ne propose pas de redéfinition, c'est la méthode de A, dont C hérite, qui est appelée.

    On notera que la classe C définit une toute nouvelle méthode, affiche(int). Et personne n'a demandé à appeler cette méthode. En fait, personne n'a rien demandé à une variable de type C. Seulement à une variable de type A. Et la classe A n'a pas de méthode affiche(int), donc ça n'a aucun rapport.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    Merci je comprends mieux.
    Quant tu me dis que ce n'est pas les même méthode pourquoi quand j'écris ceci:
    c.affiche(d);
    j'ai cela à la console:
    Je suis dans A nbr est 5.4555

    on voit bien que la méthode qui est appelé est dans la classe A est "public void affiche(double r)" pourvois?

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Parce que tu as demandé à appeler affiche(double) et que seule la classe A a une méthode affiche(double), il n'y en a donc pas d'autre qui aurait pu être appelée.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup, voilà je viens de comprendre cela fais 3 jours que je cherche une explication.
    Merci du temps que vous m'avez consacré.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    Grace à toi je vais passer un bon week end encore merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/12/2013, 10h23
  2. Toolbar qui change les actions des clics
    Par TheDrev dans le forum Windows
    Réponses: 2
    Dernier message: 23/10/2007, 11h02
  3. choix d'un radioboutton qui change les valeurs d'une comboBox
    Par poussin_44 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 04/07/2007, 09h10
  4. [VBA-Excel]Avoir une boite de dialogue avec les arguments des fonctions ?
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/05/2007, 09h37
  5. pointeurs sur les arguments des fonctions?
    Par brunoP dans le forum C
    Réponses: 3
    Dernier message: 14/05/2006, 18h11

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