Ist der Argumenttyp nicht gleichbedeutend mit der Gegenvariante?

Ich verstehe die Begriffe Ko-Varianz und Kontra-Varianz. Aber es gibt eine kleine Sache, die ich nicht verstehen kann. In der Vorlesung "Functional Programming in Scala" über coursera erwähnt Martin Ordersky Folgendes:

Funktionen sind in ihren Argumenttypen kontravariant und in ihren Rückgabetypen co-variant

Also zum Beispiel in Java lassenDog erweitertAnimal. Und sei eine Funktion:

void getSomething(Animal a){

und ich habe den Funktionsaufruf als

Dog d = new Dog();
getSomething(d)

Was also im Grunde geschieht, ist dasAnimal a = d. Und nachwiki Kovarianz ist "Weit in eng konvertieren". Und oben konvertieren wir von Hund zu Tier. Ist das Argument nicht eher kovariant als kontravariant?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage