Développer en Java/Héritage

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche

Covariance du type de retour[modifier | modifier le wikicode]

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.