8
给定两个独立的特质:撰写独立的特质
trait T1 {
def x = 42
}
trait T2 {
def x = 0
}
如果我尝试定义这两个特质:一类混合:
class C extends T1 with T2
我得到一个编译错误:
error: overriding method x in trait T1 of type => Int;
method x in trait T2 of type => Int needs `override' modifier
class C extends T1 with T2
^
one error found
现在假设T1和T2是独立开发的,因此没有覆盖,因为它们不覆盖任何东西。那么C如何定义呢?像这样:
class C extends T1 with T2 {
override def x = super.x
}
?
这很有趣。如果'T1'和'T2'中'x'的两个定义有不同的类型,这似乎是一个不可避免的问题。 如果类型不匹配,Scala中是否有一种巧妙的方法来修复这些名称冲突? – Mike 2010-05-05 23:06:30
使用我的第一个例子,然后定义'C'如下:'class C用T2 {override def x = super [T1] .x}'扩展T1。当然,你也可以调用'super [T2] .x'。 – 2010-05-06 04:04:26