Publié dans Java le 20 août 2010 | sans commentaire

// Y et Z sont des classes spécialisées de la classe X
X x = new X();
Y y = new Y();
Z z = new Z();
X xy = new Y(); // compilation ok (généralisation)
X xz = new Z(); // compilation ok (généralisation)
Y yz = new Z();   // type non compatible (fratrie)
Y y1 = new X();  // X n'est pas Y
Z z1 = new X();  // X n'est pas Z
X x1 = y; // compiles ok (y est une spécialisation X)
X x2 = z; // compiles ok (z est une spécialisation X)
Y y1 = (Y) x; // compilation ok mais produit une erreur d'exécution
Z z1 = (Z) x; // compilation ok mais produit une erreur d'exécution
Y y2 = (Y) x1; // compilation et exécution ok (x1 est de type Y)
Z z2 = (Z) x2; // compilation et exécution ok (x2 est de type Z)
Y y3 = (Y) z;  // type non convertible (fratrie)
Z z3 = (Z) y;  // type non convertibles (fratrie)
Object o = z;
Object o1 = (Y) o; // compilation ok mais produit une erreur d'exécution