Polymorphie java (methodes et attributs)
Fermé
willmonk
Messages postés
1
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
19 juin 2008
-
19 juin 2008 à 13:15
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 19 juin 2008 à 22:01
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 19 juin 2008 à 22:01
A voir également:
- Polymorphie java (methodes et attributs)
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Jeux java itel touche - Forum Mobile
2 réponses
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
19 juin 2008 à 22:01
19 juin 2008 à 22:01
Bonsoir,
Ton exercice est très intéressant. C'est exactement ce qu'il faut pour comprendre le polymorphisme.
En ce qui concerne les attributs, ce n'est pas très compliqué : c'est l'attribut de la classe qui transporte ton instance qui est utilisé. Ainsi si tu as :
A a = new A();
A b = new B();
A c = (A) new B();
c'est l'attribut de A qui est utilisé, et lorsque tu manipules une instance de B directement, c'est l'attribut de B.
En pratique on a très rarement le problème car la plupart des attributs sont définis en private, comme ça on ne peut y accéder que depuis la classe et on ne se pose pas de question.
En ce qui concerne les méthodes d'instance par contre, tu as pu te rendre compte que c'est la méthode de l'objet transporté et non pas du transporteur qui est utilisée. Ca s'appelle du late binding (ou liaison dynamique) ce qui veut dire que c'est la machine virtuelle qui va déterminer quelle méthode appeler lors de l'exécution et non pas lors de la compilation.
Attention cependant, j'ai bien dit que ceci concernait la surcharge de méthode d'instance! En ce qui concerne les méthodes de classe (méthodes static), c'est toujours la méthode du transporteur qui est utilisée, car tu n'est pas obligé d'instancier ta classe pour utiliser ses méthodes, et par conséquent ça signifie qu'avant même de lancer l'exécution, la jvm connait déjà les méthodes de classe (ceci est donc fait à la compilation et non pas à l'exécution).
Cordialement
Ton exercice est très intéressant. C'est exactement ce qu'il faut pour comprendre le polymorphisme.
En ce qui concerne les attributs, ce n'est pas très compliqué : c'est l'attribut de la classe qui transporte ton instance qui est utilisé. Ainsi si tu as :
A a = new A();
A b = new B();
A c = (A) new B();
c'est l'attribut de A qui est utilisé, et lorsque tu manipules une instance de B directement, c'est l'attribut de B.
En pratique on a très rarement le problème car la plupart des attributs sont définis en private, comme ça on ne peut y accéder que depuis la classe et on ne se pose pas de question.
En ce qui concerne les méthodes d'instance par contre, tu as pu te rendre compte que c'est la méthode de l'objet transporté et non pas du transporteur qui est utilisée. Ca s'appelle du late binding (ou liaison dynamique) ce qui veut dire que c'est la machine virtuelle qui va déterminer quelle méthode appeler lors de l'exécution et non pas lors de la compilation.
Attention cependant, j'ai bien dit que ceci concernait la surcharge de méthode d'instance! En ce qui concerne les méthodes de classe (méthodes static), c'est toujours la méthode du transporteur qui est utilisée, car tu n'est pas obligé d'instancier ta classe pour utiliser ses méthodes, et par conséquent ça signifie qu'avant même de lancer l'exécution, la jvm connait déjà les méthodes de classe (ceci est donc fait à la compilation et non pas à l'exécution).
Cordialement
mich62120
Messages postés
631
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 janvier 2010
6
19 juin 2008 à 13:23
19 juin 2008 à 13:23
Salut
Je pense que la convertion de classe comme tu le fait n'agit que sur les arguments et non sur les methodes.
Ou alors il faut essayer de les appeler différementl'une de l'autre:
A g =(A)e;
g.methodA();
C'est une proposition, il n'y a rien de sur je commence le java depuis peu.
Mich
Je pense que la convertion de classe comme tu le fait n'agit que sur les arguments et non sur les methodes.
Ou alors il faut essayer de les appeler différementl'une de l'autre:
A g =(A)e;
g.methodA();
C'est une proposition, il n'y a rien de sur je commence le java depuis peu.
Mich