共分散と反分散という用語を理解しています。しかし、私が理解できない小さなことが1つあります。coursera の「Functional Programming in Scala」コースで、Martin Ordersky は次のように述べています。
関数は引数の型で反変であり、戻り値の型で共変です
たとえば Java では、 let Dog
extends Animal
. 関数を次のようにします。
void getSomething(Animal a){
そして私は関数呼び出しを持っています
Dog d = new Dog();
getSomething(d)
つまり、基本的に何が起こっているのかということAnimal a = d
です。そしてウィキの共分散によると、「広いものから狭いものへの変換」です。上記では、dog から Animal に変換しています。SO は、反変ではなく共変の引数の型ではありませんか?