next up previous contents index
suivant: Modularité monter: Abstraction et sous-typage précédent: Réaliser une interface   Table des matières   Index

Sous-typage

Les classes Point, Cercle et Rectangle sont des sous-types de Forme. Ceci permet d'affecter à une variable de type Forme une référence à une instance de Cercle :

Forme c = new Cercle(new Point(), 2);

Ceci permet aussi de placer dans un tableau de Forme des objets de types différents :

Forme[] t = new Forme[] {o, c};

Par contre, il n'est pas possible d'affecter à une variable de type 13#13 une expression d'un sur-type de 13#13, ou d'invoquer une méthode ou un constructeur avec un argument dont le type est un sur-type du type du paramètre correspondant. Par exemple, l'affectation suivante est refusée par le compilateur si c est de type Forme :

Point q = c;         // ERREUR à la compilation

Une opération de transtypage est indispensable dans ce cas et conduira à une vérification lors de l'exécution du fait si c désigne effectivement un objet de classe Point :

Point q = (Point) c; // correct à la compilation
                     // ERREUR à l'exécution : c n'est pas un Point

Une expression comportant un transtypage vers un sous-type est toujours correctement typée, mais son évaluation pourra déclencher une exception à l'exécution.



Rene' LALEMENT 2002-11-07