在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
我知道 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