Les classes qui remplissent le contrat (défini par une interface) doivent
le déclarer. Le compilateur vérifie que c'est le cas.
class Compteur implements ICompteur {
int etat;
public int getEtat() {
return this.etat;
}
public void incrementer() {
this.etat += 1;
}
} | class Compteur5Bits implements ICompteur {
byte etat;
public int getEtat() {
return this.etat;
}
public void incrementer() {
if (etat < 0x1F) {
this.etat += 1;
} else {
this.etat = 0;
}
}
} |
Source : Compteur.java |
Source : Compteur5Bits.java |
On peut remarquer que cela ne change rien au code. Les deux classes déclarent
simplement qu'elles remplissent le contrat, elles ont les deux méthodes publiques
déclarées par l'interface ICompteur avec exactement
la même signature. En particulier, la méthode getEtat
de la classe Compteur5Bits renvoie un
int et non un byte.
Cela ne pose aucun problème car byte est un sous-ensemble
de int.