Développer en Java/Héritage

Covariance du type de retour

modifier

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éfini 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éfini 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.