当由子类覆盖时,如何强制基本方法接受相同的特定子类实例?
即:
abstract class Animal {
def mateWith(that: Animal)
}
class Cow extends Animal {
override def mateWith...?
}
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,a Cow
应该只能够mateWith
另一个Cow
.但是,如果我这样做override def mateWith(that: Cow)
,这实际上并没有覆盖基类方法(我想要它,因为我想强制它在子类中存在).
我可以检查以确保其他实例是Cow类型,并且如果不是则抛出异常 - 这是我最好的选择吗?如果我有更多的动物怎么办?我将不得不重复抛出异常的代码.
我在Scala 2.10.2上尝试定义一个特征
trait Foo {
def bar(a:String): String
def bar(a:String): Int
}
Run Code Online (Sandbox Code Playgroud)
获得编译器错误method a is defined twice
.什么是正确的语法?