假设我有以下特征
trait Market {
def getCurrency: String
}
使用以下实现
class MarketImpl extends Market {
override def getCurrency = "USD"
}
我有另一个抽象类如下
abstract class TraitTest extends Market {
}
使用MarketImpl实现实例化TraitTest的语法是什么?概念上类似于以下
new TraitTest with MarketImpl
虽然上述说法不起作用,因为MarketImpl不是特质
答案 0 :(得分:4)
TraitTest
和MarketImpl
都是类。 Scala无法从多个类继承。你应该重构你的代码,例如使TraitTest
成为一种特质。然后你可以写new MarketImpl with TraitTest
。
答案 1 :(得分:2)
您已经达到了Scala(和Java)的单一类继承限制。您可以使用实例组合/聚合来修复它(与使用Java的方式相同):
abstract class TraitTest extends Market {
def getCurrency = market.getCurrency
val market: Market
}
然后你实例化:
val myTraitTest = new TraitTest {
val market = new MarketImpl
}
scala> myTraitTest.getCurrency
res1: String = USD
答案 2 :(得分:0)
如果您计划将MarketImpl
与其他类一起实例化,请trait
为{{1}}。