Voila, après avoir rencontré un problème sur l'upcast d'un objet java, j'ai fait une petite classe de test basique:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
	}
Pourquoi le second upcast explicite ne fonctionne pas a l’exécution?
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