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.