Développer en Java/Héritage
Covariance du type de retour
Depuis Java 5
Sous ce nom obscur se cache tout simplement la possibilité d'utiliser, lors de la surcharge d'une méthode, un sous-type du type de retour définit dans la méthode surchargée.
Par exemple, la classe Object
définit la méthode clone()
qui retourne Object
. La covariance permet d'écrire :
public class Classe {
/** Redéfinition de Object#clone(). */
public Classe clone() {
return new Classe();
}
}
À bien y réfléchir, ce n'est pas choquant étant donné que le contrat général définit dans la classe mère est bien respecté par la classe fille : dans tous les cas, clone()
retourne des Object
.
En java 1.4, ce code provoque une erreur de compilation parce que les types de retours ne coïncident pas.