使用特定实现实例化的Scala语法是什么?

使用特定实现实例化的Scala语法是什么?,scala,Scala,假设我有以下特点 trait Market { def getCurrency: String } 通过以下实现 class MarketImpl extends Market { override def getCurrency = "USD" } 我有另一个抽象类,如下所示 abstract class TraitTest extends Market { } 使用MarketImpl实现实例化Traitest的语法是什么?从概念上讲,类似于以下内容 new TraitTes

假设我有以下特点

trait Market {
  def getCurrency: String
}
通过以下实现

class MarketImpl extends Market {
  override def getCurrency = "USD"
}
我有另一个抽象类,如下所示

abstract class TraitTest extends Market  {
}
使用MarketImpl实现实例化Traitest的语法是什么?从概念上讲,类似于以下内容

new TraitTest with MarketImpl

尽管上述方法不起作用,因为MarketImpl不是一种特质

叛徒
MarketImpl
都是类。Scala不能从多个类继承。你应该重构你的代码,例如,使
traitest
成为一种特征。然后您可以使用traitest编写
newmarketimpl

traitest和
MarketImpl
都是类。Scala不能从多个类继承。你应该重构你的代码,例如,使
traitest
成为一种特征。然后您可以使用traitest编写
新的MarketImpl

您已经达到了Scala(和Java)的单类继承限制。您可以使用实例组合/聚合来修复它(与使用Java的方式相同):

然后实例化:

val myTraitTest = new TraitTest {
                    val market = new MarketImpl
                  }

scala> myTraitTest.getCurrency
res1: String = USD

您已经达到了Scala(和Java)的单类继承限制。您可以使用实例组合/聚合来修复它(与使用Java的方式相同):

然后实例化:

val myTraitTest = new TraitTest {
                    val market = new MarketImpl
                  }

scala> myTraitTest.getCurrency
res1: String = USD

如果您计划与其他类一起实例化,则将
MarketImpl
a
trait

如果您计划与其他类一起实例化,则将
MarketImpl
a
trait

当您需要它的行为时,为什么不扩展
MarketImpl
你什么时候需要它的行为?