如何实例化使用构造函数扩展类的特征

时间:2014-04-19 09:14:52

标签: scala

有代码:

class A(name:String)
trait E extends A

new E{}  //compile error

这种遗传是否可行?试图在匿名类的主体中创建val或def,没有帮助。

3 个答案:

答案 0 :(得分:13)

几种可能的解决方案:

1)在类 A 构造函数中设置名称的默认值:

class A(name : String = "name")
trait E extends A
new E {} // {} is obligatory. trait E is abstract and cannot be instantiated`

2)将特质 E A 的实例混合:

object inst extends A("name") with E
// or:
new A("name") with E

答案 1 :(得分:2)

A接受构造函数参数,因此您需要传递它,例如

new A("someName") with E

答案 2 :(得分:1)

如果您想限制特质E与A类混合,您只能使用自我类型。但是,无法使用A(...)

将变量定义为新E
class A(val name: String)

trait E { self: A =>
  def printName() = println(self.name)
}

val e = new A("This is A") with E
e.printName()