Bonjour,
J'ai une petite question de débutant:
Si j'ai une classe A qui hérite de B et que B hérite de C.
Est ce que A hérite de C ?
Merci d'avance
Bonjour,
J'ai une petite question de débutant:
Si j'ai une classe A qui hérite de B et que B hérite de C.
Est ce que A hérite de C ?
Merci d'avance
Si A héritait de C on serait donc devant de l'héritage multiple, ce qui n'est pas autorisé en java.
B herite de C, et peut donc redéfinir des méthodes de la classe C.
Si A herite de B, tu hérites donc des methodes redefinient dans la classe B.
Tu suis ?
Pas sur que ce soit du multiple ca...
Multiple, c'est quand un classe hérite des plusieurs autres classes directement...
La c'est un autre cas, tu hérite d'une classe, qui hérite d'une autre classe...c'est pas du multiple...
Le modèle objet de java fonctionne comme ca...tu prends n'importe quel élément dans la java doc tu peux a chaque fois remonter de plusieurs niveaux...
La preuve...tous les objets hérite de la classe Object...c'est pas pour ca qu'on peux plus faire d'autre héritage...
Je ne suis pas d'accord,
Si la methode setup() de la classe C est "System.out.println("classe C");"
Si la classe B, qui hérite de C redéfinit la methode setup() en "System.out.println("classe B");"
et que tu appelles la classe A sans redéfinir setup, en faisant super(), tu récupères "System.out.println("classe B");" et donc tu n'hérites pas de C, mais bien de B.
C'est en tout cas mon avis.
Tout a fais d'accord avec toi, mais parce que tu surcharge dans la classe B la méthode setup() de la classe C
Si tu ne surchage pas dans la classe B ni dans la classe A, quand on appelle setup() dans la classe A, tu auras ca : System.out.println("classe C");
Autre exemple, tu peux très bien avoir la methode "testHeritage()" dans la classe B en plus des methodes de la classe C.
Ta classe A, qui hérite de B, pourrat donc appeler la methode "testHeritage" qui n'existe pas dans la classe C.
A n'hérite donc pas de C.
CQFD.
Faux !Envoyé par Regis.C
Tu prends le problème à l'envers...
Tu as les héritage suivant :
Si testHeritage() est défini dans B c'est normal qu'elle soit accessible dans A et pas dans C...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 C | +--> B | +--> A
Cela ne change rien au fait que A hérite de C :
Ce n'est pas de l'héritage multiple mais de l'héritage indirect (A n'hérite pas directement de C).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 A a = new A(); if (a instanceof C) println ("A est une instance de C");
a++
Je suis entierement d'accord avec adiGuba. Ce n'est pas de l'heritage multiple ! On devrait si c'etait le cas avoir :
Par contre , je ne suis pas d'accord sur le fait que l'heritage multiple est interdit en JAVA et les interfaces alors ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 C C2 | | +-->B<--+ | +-->A;
[edit] pas simple l'indentation dans les balises code lol [/edit]
Les interfaces ce n'est pas de l'héritage multiple...
L'héritage multiple tu peux hériter de plusieures classes...
Bah les interfaces c'est justement pour éviter l'héritage multiple...
On a le droit a un seul héritage (extends) et autant d'interface que l'on souhaite (implements)...voila!
Par contre quand on fais un super, ca concerne l'héritage, et pas les interfaces..![]()
Je doit pas etre reveillé mais je comprend rien à ce que vous dites ? Vous pourriez preciser avec des exemples ou avec plus de détails ce que vous essayer de dire sur les interfaces ?
D'accord avec "l'heritage indirect" mais ce n'est pas un héritage du même ordre que B hérite de C.Envoyé par adiGuba
Exactement !!Envoyé par tomca
En langage objet ca existe l heritage multiple mais pas en java d'ou les interfaces.
Contrairement au C++ qui ne gere pas les interfaces mais qui gere l'heritage multiple (a utiliser avec enormement de precaution !!!!)
En tout cas ici c pas de l heritage multiple mais plutot de l heritage en cascade et ca, ca n a rien de genant tant que ca reste utile biensur ...
Tu peux faire :
tu ne peux pas faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public class Toto extends Parent { }
tu peux faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public class Toto extends Parent1, Parent2 { }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public class Toto implements Interface1, Interface2 { }
Une interface ne définit que les signatures de methodes, et ne définit pas de methodes à proprement parler.Envoyé par chicorico
Tu peux donc implémenter plusieurs interfaces en implémentant des methodes d'interfaces différentes dans une seule classe.
Je comprends pas ce que ça veut dire...Par contre quand on fais un super, ca concerne l'héritage, et pas les interfaces..
Quand tu fais:
et si tu fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public classe Test extends Parent implements ISeconde { ... }
tu peux avoir:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Test test = new Test(...);
qui est vrai
Code : Sélectionner tout - Visualiser dans une fenêtre à part (test instance of Parent)
etqui est vrai...
Code : Sélectionner tout - Visualiser dans une fenêtre à part (test instanceof ISeconde)
Donc l'héritage prends aussi en compte les interfaces...
Mais effectivement super n'as pas de sens dans le cas d'une méthode d'interface, parceque celle-ci n'existe pas dans l'interface...
Partager