wiki Contravariant_method_argument_typeによると、メソッドのオーバーライドには関数型としてのサブタイプ規則がありますが、反変の引数型をサポートする言語は 1 つだけです。また、それを使用するメリットについても思いつきませんでした。
例:
class AnimalShelter {
Animal getAnimalForAdoption() { ... }
void putAnimal(Animal animal) { ... }
}
class CatShelter extends AnimalShelter {
@Overriding
Cat getAnimalForAdoption() { return new Cat(); }
@Overriding
void putAnimal(Object animal) { … }
}
私の質問は:
- オーバーライドメソッドの反変引数型は役に立ちますか? はいの場合、それはどこですか?
- メソッドは関数ですか?なぜScalaは関数型とオーバーライドメソッド型で異なるルールを持っているのですか?