Outre les difficultés mécaniques vous êtes à la rencontre de déclarer les signatures, l'objectif n'a pas beaucoup de sens. Vous êtes en train d'établir un covariant fonction de comparaison, ce qui annule l'idée de la création d'une interface que les classes dérivées peuvent adapter.
Si vous définir une sous-classe SubClass
de telle sorte que son cas ne peut être comparé à d'autres SubClass
des cas, alors comment est - SubClass
satisfaire le contrat défini par MyClass
? Rappelons qu' MyClass
, c'est dire qu'elle et tous les types de dérivés, peuvent être comparées avec les autres MyClass
des cas. Vous êtes en essayant de le faire n'est pas vrai pour SubClass
, ce qui signifie qu' SubClass
ne permet pas de satisfaire MyClass
s'contrat: Vous ne pouvez pas remplacer SubClass
pour MyClass
car SubClass
s'exigences sont plus strictes.
Ce problème centres de la covariance et la contravariance, et comment ils permettent de signatures de fonction pour changer le type de dérivation. Vous pouvez vous détendre à une exigence sur un argument du type d'accepter un plus grand type de la supertype signature de la demande-et vous pouvez renforcer l'obligation d'un retour de type promettant de revenir un étroit type que le supertype de la signature. Chacune de ces libertés permet encore de substitution parfaite du type dérivé pour le supertype; un appelant ne peut pas faire la différence lors de l'utilisation du type dérivé à travers le supertype de l'interface, mais un appelant à l'aide de la dérivée de type concrète peut profiter de ces libertés.
Willi réponse de l' enseigne quelque chose à propos de déclarations génériques, mais je vous invite à reconsidérer votre objectif avant d'accepter la technique au détriment de la sémantique.