Heritage en java

Fermé
jeuneDebutant Messages postés 5 Date d'inscription dimanche 10 janvier 2010 Statut Membre Dernière intervention 10 janvier 2010 - 10 janv. 2010 à 17:37
jeuneDebutant Messages postés 5 Date d'inscription dimanche 10 janvier 2010 Statut Membre Dernière intervention 10 janvier 2010 - 10 janv. 2010 à 18:10
Bonjour,

Je dois realiser un programme et j'ai une petite question concerant l'héritage entre classe en java.

Supposons que j'ai une class A suivie de deux classe qui héritent de A : class B et class C.

On a donc,
- class A
methode 1a
...
- class B extends A
methode 1b
...
- class C extends A
methode 1c
...

Si j'ai un objet "b" de la classe B alors je peux utiliser les méthodes de la class B(methode 1b,...) ainsi que les méthodes de la class A(méthode 1a,...) en ecrivant b.methode1b() ou b.methode1a.

Mon problème est que j'ai un tableau d'élement de class A. Par conséquent, ces éléments sont de la forme B ou C. Lorsque je veux faire T[x].methode1b() pour un x fixé, ca marche pas! Par contre, T[x].methode1a oui.

J'ai ecris ensuite if (T[x] instanceof class B){ T[x].methode1b()} mais ca marche toujours pas!

Est-ce que c'est que pour lui, T[x] est un élément A mais il sait pas le reconnaitre comme élément B. Y-a-t-il une methode? un mot clé?

*ps. J'espère avoir été le plus clair possible.

Merci d'avance pour votre aide.
A voir également:

5 réponses

bqst Messages postés 58 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 24 janvier 2012 24
10 janv. 2010 à 17:41
Où se trouve ton tableau d'élément de class A ?
0
jeuneDebutant Messages postés 5 Date d'inscription dimanche 10 janvier 2010 Statut Membre Dernière intervention 10 janvier 2010
10 janv. 2010 à 17:48
Dans une autre classe.

C'est assez compliqué je sais mais j'ai une classe D si tu veux qui est un tableau d'élément de A.

public class D{

A [] t;
int taille;

ou t est le tableau et pas "T" comme j'ai ecrit en haut.
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
10 janv. 2010 à 17:50
Salut,
Tu as essayé:
if (T[x] instanceof class B)
{
((B)T[x]).methode1b();
}
0
jeuneDebutant Messages postés 5 Date d'inscription dimanche 10 janvier 2010 Statut Membre Dernière intervention 10 janvier 2010
10 janv. 2010 à 17:59
ben si j'écris (B(t[x]).methode1b() ) ou (B(t[x])).methode1b ca me souligne plus en rouge methode1b comme avant ce qui est une bonne chose mais par contre, ca me souligne B.
0
bqst Messages postés 58 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 24 janvier 2012 24
10 janv. 2010 à 17:53
Essaye de casté tout ça
(A) T[x].methode1b()
0
jeuneDebutant Messages postés 5 Date d'inscription dimanche 10 janvier 2010 Statut Membre Dernière intervention 10 janvier 2010
10 janv. 2010 à 18:01
Ca ne change rien si j'ecrit (A)t[x].methode1b();
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bqst Messages postés 58 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 24 janvier 2012 24
10 janv. 2010 à 18:07
Jme suis trompé, jviens de faire un petit schéma, je t'explique avec un exemple:
Tu as A qui représente la classe Animal,
B représente la classe Mouton qui extends d'Animal,
Ta methodeB correspond à Crier par exemple,
C représente la classe Bergerie qui contient un tableau d'"Animal".
Donc si tu veux appeler la méthode Crier de Mouton il faut que la case de ton tableau soit en Mouton, c'est à dire qu'il faut "casté" la case du tableau A en B
Normalement ça se fait ((B)t[x]).methodeB();
essaye :p
0
jeuneDebutant Messages postés 5 Date d'inscription dimanche 10 janvier 2010 Statut Membre Dernière intervention 10 janvier 2010
10 janv. 2010 à 18:10
Ok. Ca marche. J'ai compris la méthode maintenant.

Merci beaucoup pour ton aide.
0