salut, je voudrais pourquoi le code ci-dessous imprime "Good Night!" trois fois. pourquoi le casting ne fonctionne pas ?
merci
class X {
void greet() {
System.out.println("Good Morning!");
}
}
class Y extends X {
void greet() {
System.out.println("Good Afternoon!");
}
}
class Z extends Y {
void greet() {
System.out.println("Good Night!");
}
}
public class Test {
public static void main(String[] args) {
X x = new Z();
x.greet(); //Line n1
((Y)x).greet(); //Line n2
((Z)x).greet(); //Line n3
}
}
A Vaincre sans péril on finit par triompher sans gloire -> le Cid de corneille
merci pour l'explication !! sinon d’après mes recherches, il existe deux types de polymorphismes : le polymorphisme a la compilation appelé encore surcharge et le polymorphisme a l’exécution appelé encore redéfinition. le polymorphisme a la compilation(surcharge) se base la reference de l'objet pour déterminer la méthode a appeler c'est a dire que le compilateur ne regarde pas le type d'objet a l'autre bout. par contre, le polymorphisme a l’exécution (redéfinition) se base sur le type d'objet a l'autre bout de la variable de reference pour déterminer la méthode a exécuter.
Dans le cas ci-dessus, nous avons a faire a un polymorphisme a l’exécution puisqu'il y a redéfinition ce qui implique qu'il y a héritage. la méthode great() de z sera toujours exécutée.
je continue a me préparer pour l'examen 1Z0-808.
merci pour l'aide
A Vaincre sans péril on finit par triompher sans gloire -> le Cid de corneille