Java pour l'informatique industrielle
Chapitre 1. Introduction aux objets
Chapitre 2. Les structures de contrôle
Chapitre 3. Unifier et réutiliser
3.1. Motivation
3.2. Exploiter l'orthogonalité
3.3. Les interfaces
3.4. Le polymorphisme
3.5. L'héritage
3.6. Les collections
3.6.1. La classe java.util.ArrayList
3.6.2. Utilisation
3.6.3. Transtypage
3.6.4. Exercice
3.6.5. Les collections génériques
3.7. Objets et HDL
Chapitre 4. Modèle, Vue et Contrôle
Chapitre 5. Les entrées/sorties
Page d'accueilTable des matièresNiveau supérieurPage précédenteBas de la pagePage suivante

3.6.3. Transtypage

Lorsqu'on connaît le type dynamique d'un objet et que le type statique n'est pas suffisamment précis pour faire ce que l'on souhaite, on peut forcer le type statique d'une expression, c'est le transtypage.

((CompteurModulo)maListe.get(1)).incrementer();

Le type statique de ((CompteurModulo)maListe.get(1)) est CompteurModulo. L'appel de la méthode incrementer() est donc autorisé alors que le type statique de maListe.get(1) est Object. Il est donc interdit d'écrire maListe.get(1).incrementer();

Le transtypage permet de choisir comme type statique n'importe quelle sous-classe du type statique actuel. Il n'y a pas de mécanisme spécifique pour choisir une super-classe du type statique actuel car le polymorphisme permet cette transformation sans complément syntaxique. Il est interdit de transformer un type statique vers une classe qui est ni une sous-classe, ni une super-classe, cela est rejeté à la compilation.

Si on utilise un transtypage valide et que le type dynamique effectif n'est pas compatible avec le type statique choisi dans la conversion, on obtient à l'exécution une exception ClassCastException.

Page d'accueilTable des matièresNiveau supérieurPage précédenteHaut de la pagePage suivante