Votre question

Besoin de precision sur le cast en java

Tags :
  • Java
  • Programmation
Dernière réponse : dans Programmation
5 Novembre 2012 20:38:29

Bonjour a tous,
je fais appelle a vous car j'ai besoin de quelques precisions sur le cast.

Je vais attaquer avec un exemple.

nous avons 2 classe, A et B (B hérite de A).
la classe A possede les méthodes methodeA et methodeB.
la classe B possede les méthodes methodeA, methodeB et methode C.

Je déclare

  1. A a = new B();
  2. a.méthodeC();


ma question et la suivante :
pourquoi a.methodeC() pose probleme ?

je sais que méthodeC n'existe pas dans la classe A mais si on met une méthode methodeC() dans A le compilateur va utiliser la méthode de l'objet de l'objet réel (c'est a dire la méthode de B.

Donc dans la logique puisque le compilateur utilise la méthode de l'objet réelle, meme si on ne met pas de méthode methodeC() dans la classe A, cela devrai fonctionner hors ça ne fonctionne pas. Pourquoi ?

Merci a vous pour vos reponses

Autres pages sur : besoin precision cast java

a c 232 L Programmation
5 Novembre 2012 21:27:40

Salut,

Ca ne fonctionne pas parce que tu déclares que ton objet est de type A.
Or ce type A n'a pas de methodeC()

C'est tout aussi simple.
Tu déclarerais ça :
  1. B b = new B();
  2. b.methodeC();


Ca serait bon.

Là c'est un peu comme si tu disais que ta classe A c'est un EtreVivant, et que ta classe B c'est un Humain; et que y'a une méthode Parler() dans ta classe B.
Du coup, tous les EtreVivant n'ont pas cette méthode, et donc un EtreVivant ne peut pas aller cette méthode.

5 Novembre 2012 21:39:34

je ne comprend pas.
l'objet que j'ai creer est bien de type B non ? puisque je le construit avec le constructeur B()
A a est simplement une variable qui reference un objet de type B.
On a donc un objet de type B dont sa reference est stocké dans une variable de type A je me trompe ?
Contenus similaires
a c 232 L Programmation
6 Novembre 2012 00:08:11

L'objet que tu as créé est bien de type B, mais tu as dit que la variable serait de type A.
Donc tu ne peux qu'appeler les méthodes disponibles dans A.
Si tu veux appeler la méthode C, il faut caster ton objet en B. Ca doit se faire comme ça en Java:
  1. ((B)a).methodeC();
a b L Programmation
6 Novembre 2012 21:46:44

Oui, en mémoire, l'objet a bien cette méthode, mais si tu le manipules comme une classe A (qui ne déclare pas cette méthode), alors tu ne la vois pas.
Il faut faire le down cast indiqué par OmaR pour pouvoir y accéder.
Par contre, il est conseillé de toujours tester si l'objet down cast est null (s'il y a plusieurs down cast possible).
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS