特质基础知识

这是 Scala 中最基本的特征版本。

trait Identifiable {
  def getIdentifier: String
  def printIndentification(): Unit = println(getIdentifier)
}

case class Puppy(id: String, name: String) extends Identifiable {
  def getIdentifier: String = s"$name has id $id"
}

由于没有为特征 Identifiable 声明超类,因此默认情况下它从 AnyRef 类扩展。因为在 Identifiable 中没有提供 getIdentifier 的定义,所以 Puppy 类必须实现它。然而,Puppy 继承了 IdentifiableprintIdentification 的实现。

在 REPL 中:

val p = new Puppy("K9", "Rex")
p.getIdentifier  // res0: String = Rex has id K9
p.printIndentification()  // Rex has id K9