wiki Contravariant_method_argument_type说覆盖方法具有子类型规则作为函数类型,但是除了一种语言之外没有一种语言支持逆变参数类型。我也无法想出任何使用它的好处的想法。
例子:
class AnimalShelter {
Animal getAnimalForAdoption() { ... }
void putAnimal(Animal animal) { ... }
}
class CatShelter extends AnimalShelter {
@Overriding
Cat getAnimalForAdoption() { return new Cat(); }
@Overriding
void putAnimal(Object animal) { … }
}
我的问题是:
- 重写方法的逆变参数类型是否有用?如果是,它在哪里?
- 方法是函数吗?为什么 Scala 对函数类型和覆盖方法类型有不同的规则?