考虑下面的代码:
trait A { def work = { "x" } } trait B { def work = { 1 } } class C extends A with B { override def work = super[A].work }
C类将不会在scala 2.10中进行编译,因为“在类型=> String的trait A中重写方法的工作方法工作具有不兼容的类型”.
如何选择一种具体方法?
解决方法
恐怕没办法做到这一点.只有当A和B具有相同的返回类型时,超级[A].工作方式才有效.
考虑这个:
class D extends B .... val test: List[B] = List(new C(),new D()) test.map(b => b.work) //oops - C returns a String,D returns an Int