Partage
  • Partager sur Facebook
  • Partager sur Twitter

casting en java

JAVA 8

28 octobre 2022 à 23:05:46

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
    }
}



  • Partager sur Facebook
  • Partager sur Twitter
A Vaincre sans péril on finit par triompher sans gloire  ->  le Cid de corneille
2 novembre 2022 à 10:41:02

Bonjour,

Quand tu cast un objet, tu fais une référence vers l'autre type. Le type de l'objet ne change pas et ne pourra pas changer.

Donc x est de type Z et le restera même avec un cast (Y)x, c'est la raison pour laquelle il t'affiche 3 fois "Good Night!".

Sources: 1,2,3.

  • Partager sur Facebook
  • Partager sur Twitter
Don't quit, suffer now and live the rest of your life as a Champion
6 novembre 2022 à 15:10:46

M4jestic a écrit:

Bonjour,

Quand tu cast un objet, tu fais une référence vers l'autre type. Le type de l'objet ne change pas et ne pourra pas changer.

Donc x est de type Z et le restera même avec un cast (Y)x, c'est la raison pour laquelle il t'affiche 3 fois "Good Night!".

Sources: 1,2,3.

bonjour,

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



  • Partager sur Facebook
  • Partager sur Twitter
A Vaincre sans péril on finit par triompher sans gloire  ->  le Cid de corneille