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