ICompteur compteur;
Quel est donc le type de la référence compteur ?
Pour répondre à cette question, il convient de distinguer le
type statique du type dynamique.
Le type statique est le type déclaré d'une référence, il ne change jamais au cours
d'un programme, ici le type statique de compteur est
ICompteur. Le type statique est utilisé par le compilateur
pour déterminer quelle méthode peut être appelée sur quelle référence.
Le type dynamique est le type effectif de l'objet pointé par une référence,
il peut changer au cours d'un programme. Le type dynamique est utilisé à
l'exécution pour déterminer le comportement effectif à exécuter. C'est la
liaison dynamique.
compteur = new Compteur();
Ici, le type dynamique est Compteur.
compteur.incrementer();
Cette instruction exécute la méthode incrementer()
de la classe Compteur.
compteur = new Compteur5Bits();
Après cette nouvelle affectation, le nouveau type dynamique est
Compteur5Bits alors que le type statique
reste ICompteur.
compteur.incrementer();
Maintenant, la même instruction exécute la méthode incrementer()
de la classe Compteur5Bits.