A voir également:
- Polymorphie java (methodes et attributs)
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
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