一个类智能继承自单个具体或abstruct类
但是它可以组合任意多的特征 trait
组合特征时,有可能会将具有相同签名(方法与类型的组合)的两个办法混合在一起。
如果方法或域的签名产生冲突,name需要人工解决冲突,就像在object c 中看到的那样
(这里,object祈祷了快捷方式的作用,通过它可以创建类,然后创建该类的一个实例)
trait A{
def f = 1.1
def g = "A.g"
val n = 7
}
trait B{
def f = 1.1
def g = "B.g"
val n = 7
}
object C extends A with B {
override def f = 9.9
override val n = 27
override def g = super[A].g + super[B].g
}
c.f is 9.9
c.g is "A.gB.g"
c.n is 27
方法 f .g 和域 n 在特征 A和B中具有相同的签名,因此Scala不知道该怎么办,于是给出了错误的消息
方法和域可以被新的定义覆盖,但是方法也可以使用super关键字访问他们自己在基类中的版本。
标示符相同但类型不同的冲突在Scala中式不允许的。