Scala特质如何表现?

Scala特质如何表现?,scala,traits,Scala,Traits,为了更好地理解特性,我创建了这个小Scala示例 trait Writer { def write(value: Int): Unit = { print("Writer") } } trait Hdd extends Writer { override def write(value: Int): Unit = { print("Hdd") } } trait File extends Writer { override def write(value:

为了更好地理解特性,我创建了这个小Scala示例

trait Writer {
  def write(value: Int): Unit = {
    print("Writer")
  }
}

trait Hdd extends Writer {
  override def write(value: Int): Unit = {
    print("Hdd")
  }
}

trait File extends Writer {
  override def write(value: Int): Unit = {
    print("File")
  }
}

class TestClass extends App {
  (1)   val myWriter = new Writer with Hdd   // This line looks fine
  (2)   val myNewWriter = new Writer         // This line fail
}
在我的理解中,不可能实例化一个特征,因此第2行失败了

但由于某种我无法理解的原因,第1行看起来不错

如何做到这一点?

试试:

val myWriter = new Writer {}

我想它需要一个实现,即使这个实现是空的

是的,你是对的,一个特性不能在Scala中实例化。一个特性不能实例化,只能在Scala中混合。您需要一个类进行实例化,当您将new writer与Hdd一起使用时,它会创建一个匿名类,因此您的实例化看起来很好,不会给出任何错误。第二行出现错误,因为这只是一个特征,因此无法实例化。

当您添加{},它创建了一个匿名类。因此实例化很有效。太好了。谢谢你的帮助