bonsoir,
si j'ai une classe C1 qui a deux sous classes C2 ET C3
quelle est la différence entre :
merci d'avanceCode:
1
2
3
4
5
6 C1 toto = new C2(); et C2 bla = new C2(); et C1 bb = new C1() bb = (C1)bla
Version imprimable
bonsoir,
si j'ai une classe C1 qui a deux sous classes C2 ET C3
quelle est la différence entre :
merci d'avanceCode:
1
2
3
4
5
6 C1 toto = new C2(); et C2 bla = new C2(); et C1 bb = new C1() bb = (C1)bla
salut,
C1 toto = new C2(); // déclaration d'une instance de C1 avec comme type
//dynamique C2
C2 bla = new C2(); //déclaration d'une instance de C2 (type statique = type
//dynamique)
C1 bb = new C1(); // déclaration d'une instance de C1 (type statique = type
//dynamique)
Merci bien pour la réponse
peut-être j'ai mal posé ma question
je voulais savoir la différence càd si les 3 classes ont une méthode test() qui affiche je suis la classe Cx
Donc quel sera l'intérêt de faireCode:
1
2
3 toto.test() affichera "je suis la classe C2" bla.test() affichera aussi "je suis la classe C2"
à noter que d'après ce que j'ai compris C1 toto = new C2(); instancie un objet C2 mais qui est vu comme C1 on appelant toto.test() on appelle la méthode test() de C2 et pas de C1Code:C1 toto = new C2();
en plus est-il possible d'expxliquer davantage les types statiques et dynmaiques
Un peu d'éclairssicement svp
L'intérêt de faire C1 bla = new C2(); réside dans le polymorphisme.
Pour faire simple, et par l'exemple :
Supposons que tu aies une classe A et deux classes B et C qui héritent de A.
Supposons que tu aies :
- A a = new A();
- A b = new B();
- A c = new C();
Tu peux créer un vecteur composé des objets a, b et c et le traiter comme s'il s'agissait d'objets de type A, càd invoquer les méthodes appartenant à la classe A et donc héritées par B et C.
L'intêret est que lorsque tu appeleras ta méthode test(), c'est celle "spécialisée" dans ta sous classe qui sera appelée et dans le cas où il n'y a pas de spécialisation de cette méthode, c'est celle de la classe mère qui sera invoquée.