[英]Why does this Scala code not compile?
我不明白为什么它不能编译。 抱怨说是哺乳动物类型的朋友没有说话方法。 但是还有...
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
}
在set
Mammal
与您在上面几行声明的Mammal
。 这是一个局部通用类型参数,使您现有的Mammal
了一层阴影。 因此,您的方法签名实际上与以下内容没有区别:
override def set[AA >: Cow](friend: AA): String = friend.talk
由于AA
是Cow
的超类型,因此不能保证使用talk
方法。 例如,可以用Any
或AnyRef
代替它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.