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?