¿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?

Respuestas a la pregunta(4)

Su respuesta a la pregunta