trait Tonträger { val title: String // abstraktes Attribut def preis(stück: Int): Double // abstrakte Methode def whoAmI: String = {this.getClass + ": " + this} // Mixin override def toString: String = title // Mixin } class Tonband(val title: String) extends Tonträger { // title deklarieren! def preis(n: Int) = 5.50 * n // preis deklarieren! } class Kassette(title: String) extends Tonband(title) with Tonträger { override def preis(n: Int) = 2.50 * n // preis überschreiben ... } // ... oder gar nicht deklarieren! object TraitsTest extends Application { val tb = new Tonband("West End Blues") val ks = new Kassette("Surrealistic Pillow") println(tb.whoAmI) // => "class Tonband: West End Blues" println(ks.whoAmI) // => "class Kassette: Surrealistic Pillow" }