O tipo de argumento não é contra-variante?
Eu entendo os termos co-variância e contra-variância. Mas há uma pequena coisa que não consigo entender. No curso "Programação Funcional em Scala" no coursera, Martin Ordersky menciona que:
Funções são contravariantes em seus tipos de argumento e co-variantes em seus tipos de retorno
Então, por exemplo, em Java, vamosDog
estendeAnimal
. E deixe uma função ser:
void getSomething(Animal a){
e eu tenho a chamada de função como
Dog d = new Dog();
getSomething(d)
Então, basicamente, o que está acontecendo é queAnimal a = d
. E de acordo comwiki A covariância é "Converter mais para estreito". E acima estamos convertendo de cão para Animal. Portanto, o tipo de argumento não é covariante em vez de contravariante?