Scala抽象继承

Scala抽象继承,scala,inheritance,types,Scala,Inheritance,Types,所以,我想做的是使用traits创建一个抽象的继承模型。我认为示例代码效果最好,所以我创建了这个小展示来展示我的问题 trait Animals{ val owned: Seq[Animal] type Animal <: TAnimal trait TAnimal { def name : String } } trait动物{ val拥有:Seq[动物] 输入Animal这被称为蛋糕图案。你不需要在Dog trait中写下所有的东西,你可以这样定义它: trait Ani

所以,我想做的是使用traits创建一个抽象的继承模型。我认为示例代码效果最好,所以我创建了这个小展示来展示我的问题

trait Animals{
 val owned: Seq[Animal]
 type Animal <: TAnimal
 trait TAnimal {
  def name : String
 }
}
trait动物{
val拥有:Seq[动物]

输入Animal这被称为蛋糕图案。你不需要在Dog trait中写下所有的东西,你可以这样定义它:

trait Animals{
 type Animal <: TAnimal
 def owned: Seq[Animal]
 trait TAnimal {
  def name : String
 }
}

trait Dogs extends Animals{
 type Animal <: TDog
 trait TDog extends TAnimal {
  def identNo : Int
 }
}
现在,您可以将其混入:

scala> val dogs = new Dogs with ReservoirDogs {}
dogs: Dogs with ReservoirDogs = $anon$1@6f6f6727

scala> val dogs = new Animals with ReservoirDogs {}
dogs: Animals with ReservoirDogs = $anon$1@11c8ce34

这就是蛋糕图案的全部内容

谢谢,这真的很有帮助。到目前为止我还不知道蛋糕图案。顺便说一句,我真的很喜欢你的例子=)
trait ReservoirDogs extends Dogs {
  case class Animal(name: String, identNo: Int) extends TDog
  val owned = List(Animal("Pink", 1), Animal("Blue", 2))
}
scala> val dogs = new Dogs with ReservoirDogs {}
dogs: Dogs with ReservoirDogs = $anon$1@6f6f6727

scala> val dogs = new Animals with ReservoirDogs {}
dogs: Animals with ReservoirDogs = $anon$1@11c8ce34