4

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) {      …        }     
}

私の質問は:

  1. オーバーライドメソッドの反変引数型は役に立ちますか? はいの場合、それはどこですか?
  2. メソッドは関数ですか?なぜScalaは関数型とオーバーライドメソッド型で異なるルールを持っているのですか?
4

2 に答える 2