我不明白为什么这不编译。它抱怨哺乳动物类型的朋友没有谈话方法。但是有......
class Animal {
def talk:String = "i am animal"
}
class Mammal extends Animal {
override def talk:String = "i am mammal"
}
class Cow extends Mammal {
override def talk:String = "moo"
}
trait Farm[+A] {
def set[AA >: A](friend: AA): String
}
class CowFarm extends Farm[Cow] {
override def set[Mammal >: Cow](friend: Mammal): String = friend.talk
}
答案 0 :(得分:4)
set
Mammal
与您在上面声明的几行不同Mammal
。它是一个本地泛型类型参数,它隐藏了现有的Mammal
。因此,您的方法签名实际上与以下内容没有区别:
override def set[AA >: Cow](friend: AA): String = friend.talk
由于AA
是Cow
的超类型,因此无法保证拥有talk
方法。例如,它可以替换为Any
或AnyRef
。