为什么下面的
更新:一个可能的解决方案如下。现在在
x.func
返回 "B extends B extends B"
?如何修改这段代码以返回 "B extends A extends Base"
?trait Base {
def name = "Base"
def func = name
}
trait A extends Base {
override def name = "A"
override def func = name + " extends " + super.func
}
trait B extends Base {
override def name = "B"
override def func = name + " extends " + super.func
}
val x = new Base with A with B
println(x.func)
更新:一个可能的解决方案如下。现在在
A
和B
中有相同的func1
定义。如果我尝试将其移动到Derived
类中,它将不起作用。有什么想法可以消除func1
的重复?trait Base {
def name = "Base"
def func1(s: String) = s
}
trait Derived extends Base {
def func = func1(name)
}
trait A extends Derived {
override def func1(s: String) = s + " extends " + super.func1(super.name)
override def name = "A"
}
trait B extends Derived {
override def func1(s: String) = s + " extends " + super.func1(super.name)
override def name = "B"
}
val x = new Base with A with B
println(x.func)