我在马丁·奥德斯基(Martin Odersky)的书中读到,特质扩展了超类AnyRef。所以对我来说就像一堂课。我知道我不能在类中通常使用的特征中使用默认构造函数
class B(s: String)
同时,我看到不可能做这样的事情
trait A {
def this(s: String) {
super()
}
}
编译器说:
Error:(14, 7) 'this' expected but 'super' found.
super()
^
为什么?
直接来自Scala语言规范:
特质是一类,应作为混合添加到其他某个类中。与普通类不同,特征不能具有构造函数参数。此外,没有构造函数参数传递给trait的超类。这是不必要的,因为特征是在初始化超类之后初始化的。
归结为:
特质可以归结为没有参数的java接口,这对于java-interop来说很好。
虽然在理论上允许特征具有构造函数参数是可能的,但它使语言变得比所需的更加复杂。几乎可以肯定有一种方法可以完成相同的功能,而无需使用特征构造器参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句