Voila, après avoir rencontré un problème sur l'upcast d'un objet java, j'ai fait une petite classe de test basique:
Pourquoi le second upcast explicite ne fonctionne pas a l’exécution?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public class TestPoly { int a; int b; ....setter/getter} public class B extends TestPoly{ int a; int b; ...constructeur/setter/getter } public class demo { public static void main(String[] args) { // classe mere TestPoly m=new TestPoly(); //upcast ok fille-->mere TestPoly b=new B(); // classe fille B bb=new B(); // upcast : mere-->fille exdplicite (compile ok) bb=(B)m; // erreur //Exception in thread "main" java.lang.ClassCastException:TestPoly cannot be cast to B }
Je sais qu'il y a une liaison tardive a l’exécution et que le compilo accepte la possibilité que cela peut marcher.
Mais pourquoi dans ce cas la, y a t il une ClassCastException ? Pourquoi le cast est impossible (surtout sur des classes aussi proches) ?
Comment peut on prévenir cette exception ?
thanks