ICompteur compteur;
ICompteur est le type statique de compteur.
L'instruction compteur.incrementer(); compile car le type statique
de compteur déclare une méthode incrementer().
L'instruction compteur.etat; ne compile pas car le type statique
de compteur ne déclare de champs etat.
Les problèmes de compilation concernent uniquement le type statique des références.
Si la référence ne pointe sur aucun objet, elle pointe sur null.
Pointer sur null, n'empêche en aucune façon le code de compiler.
A l'exécution, cependant, on obtient une exception de type NullPointerException.
compteur = new Compteur();
Le type dynamique est désormais Compteur.
L'instruction compteur.incrementer(); concerne donc la
classe Compteur.
compteur = new Compteur5Bits();
Après cette nouvelle affectation, le nouveau type dynamique est
Compteur5Bits.
Maintenant, l'instruction compteur.incrementer();
exécute la méthode incrementer()
de la classe Compteur5Bits.