scala learning – 2

Trait

继承 , 遵循 接口 , 混合 特性

extends ClassA
impletends InterfaceA
extends TraitA with TraitB with TraitC

scala 中没有接口 interface , 没有关键词 implements

trait 相当于综合了 interfaceabstract class
相比于 interface , 它的方法可以具体实现
相比于 abstract class , 一个 可以混合多个 trait

trait TraitA{
  def functionA
}
trait TraitB{
  def functionB = println("B")
}
trait TraitC1{
  def functionC = println("C1")
}
trait TraitC2{
  def functionC
}

class ClassZ extends TraitA with TraitB with TraitC1 with TraitC2{
  def functionA = println("A")
  override def functionC = println("C from Z")
}

object Abc extends App{
  val z = new ClassZ
  z.functionA
  z.functionB
  z.functionC
  val za:TraitA = z
  val zb:TraitB = z
  val zc:TraitC1 = z
  za.functionA
  zb.functionB
  zc.functionC
}

结果

A
B
C from Z
A
B
C from Z