Share behavior through a trait with a default method.

Trait Contracts

TraitContract.scala
trait Greeter {
  def greeting: String = "hello"
}

class English extends Greeter {
  override def toString: String = "[english]"
}

object Main {
  def main(args: Array[String]): Unit = {
    val name = 
    val speaker = new English()
    val message = speaker.greeting + ", " + name

    println("greeting=" + speaker.greeting)
    println("message=" + message)
  }
}
trait Greeter {
  def greeting: String = "hello"
}

class English extends Greeter {
  override def toString: String = "[english]"
}

object Main {
  def main(args: Array[String]): Unit = {
    val name = 
    val speaker = new English()
    val message = speaker.greeting + ", " + name

    println("greeting=" + speaker.greeting)
    println("message=" + message)
  }
}
trait Greeter {
  def greeting: String = "hello"
}

class English extends Greeter {
  override def toString: String = "[english]"
}

object Main {
  def main(args: Array[String]): Unit = {
    val name = 
    val speaker = new English()
    val message = speaker.greeting + ", " + name

    println("greeting=" + speaker.greeting)
    println("message=" + message)
  }
}
trait-contract A trait defines shared behavior. A class that extends the trait gains its methods without repeating the code.