假设我有以下代码:冲突的嵌套遗传性状
trait Trait1 {
trait Inner {
val name = "Inner1"
}
}
trait Trait2 {
trait Inner {
val name = "Inner2"
}
}
class Foo extends Trait1 with Trait2 {
// I want Concrete1 to be a Trait1.Inner not a Trait2.Inner
class Concrete1 extends Inner
val c = new Concrete1
}
object Obj {
def main(args: Array[String]): Unit = {
val foo = new Foo
println(foo.c.name)
}
}
当我Trait1
和Trait2
混合,指Inner
似乎默认为Inner
类型为准特质我混入第二的;所以当我拨打Obj
的main
方法时,它会打印Inner2
。我如何参考Foo
中的Trait1.Inner
?所有这三个下面给编译器错误的:
class Concrete1 extends Trait1.Inner
class Concrete1 extends Trait1$Inner
class Concrete1 extends Trait1#Inner
这很棒,我现在可以编写类Concrete1扩展超[Trait1]。内部和类Concrete2扩展超[Trait2] .Inner并具有两种类型的Inner in Foo的实例。 – ams 2010-01-16 11:07:44