¿El tipo de argumento no es contra-variante?
Entiendo los términos covarianza y contravarianza. Pero hay una pequeña cosa que no puedo entender. En el curso "Programación funcional en Scala" en Coursera, Martin Ordersky menciona que:
Las funciones son contravariantes en sus tipos de argumentos y covariantes en sus tipos de retorno.
Así, por ejemplo, en Java, vamos aDog
se extiendeAnimal
. Y dejar que una función sea:
void getSomething(Animal a){
y tengo la función de llamada como
Dog d = new Dog();
getSomething(d)
Así que básicamente lo que está pasando es queAnimal a = d
. Y de acuerdo awiki La covarianza es "Convertir de ancho a estrecho". Y encima estamos convirtiendo de perro a animal. ¿Entonces el tipo de argumento no es covariante en lugar de contravariante?