特质(trait)是Scala里代码复用的基础单元。特质封装了方法和字段的定义,并可以通过混入到类中重用它们。与类的继承时每个类都只能继承唯一的超类不同,类可以混入任意多个特质。
如果想把特质混入显式扩展超类的类里,可以用extends指明扩展的超类,用with混入特质。
trait TraitA {
def fun() {
println("this is traitA")
}
}
class A extends TraitA{
override def toString = "class A"
}
def main(args: Array[String]): Unit = {
val a = new A()
a.fun()
val b : TraitA = a
b.fun()
}
定义了一个名为TraitA的特质,它有一个默认的超类AnyRef。可以使用extends或with关键字,把它混入到类中,而不是继承它们。如果想把特质混入显式扩展超类的类里,可以用extends指明扩展的超类,用with混入特质。
class A extends B with TraitA with TraitB {
override def toString = "class A"
}
当然可以在类中重写特质类的方法,语法与重写超类中定义的方法一样。