在scala中,特征是否可以扩展需要参数的class?

In scala is it possible for a trait to extend a class which needs parameters?

我知道 trait 可以扩展 class,它有一个空参数构造函数:

class Foo
trait Bar extends Foo

但是是否可以扩展 class 哪个构造函数有一些参数?

class Foo(b: Boolean)
trait Bar extends Foo(true)

有可能实现吗?好像不太可能。但是为什么?

谢谢

使 arg 成为 val 似乎可行。

scala> class Foo(val b: Boolean)
defined class Foo

scala> trait Bar extends Foo {override val b = true}
defined trait Bar

如果您将 class 设置为 case class,它也会自动将 args 转换为 vals。

编辑

正如@Aleksey 所指出的,这可以编译,但它是一个无法实例化的特性,所以,不,它似乎仍然不可能。您必须将 Bar 设置为 class.

scala> class Bar extends Foo(false) {println(b)}
defined class Bar

scala> new Bar
false

是的,有可能,你只是不能给构造函数参数:

trait Bar extends Foo { ... }

但是要实例化它你还需要调用构造函数:

new Foo(false) with Bar