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

时间:2015-08-21 05:15:58

标签: scala inheritance extends traits

我知道一个特征可以扩展一个具有空参数构造函数的类:

class Foo
trait Bar extends Foo

但是可以扩展一个构造函数有一些参数的类吗?

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

有可能实现这一目标吗?看来这是不可能的。但为什么呢?

由于

2 个答案:

答案 0 :(得分:3)

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

func mapView(mapView: MKMapView!, regionDidChangeAnimated animated: Bool)

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

trait Bar extends Foo { ... }

答案 1 :(得分:2)

使arg成为val似乎有效。

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

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

如果你使类case class自动将args转换为val,这也有效。

修改

正如@Aleksey指出的那样,这会编译,但它是一个无法实例化的特性,所以,不,它似乎仍然不可能。你必须让Bar成为一个班级。

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

scala> new Bar
false