我正在尝试调试scala程序。我发现了一种与下列行为类似的特征:
trait A {
val a: Int = b
val b: Int = a
}
class B extends A
如果我们看一下这个特性,就会有循环分配。 val
b
甚至未定义,但在val
a
的定义中使用。
以上程序编译成功。 a
和b
都是zero
。我尝试使用变量类型字符串,然后值为null
。
有第三个类覆盖val a
类似于以下
class C extends A {
override val a: Int = 10
}
现在,如果创建了类C
的实例,则值a
为10,但val
的{{1}}仍为b
。
最后,我进一步检查,而不是覆盖类的主体,当我在构造函数参数中覆盖它时类似于以下内容:
0
然后将class D(override val a: Int) extends A
val d = new D(10)
和d.a
初始化为10。
我想明白:
- 中的
d.b
中val
的定义如何有效?换句话说,scala如何解释trait A
val
作业- 醇>
当在scala类的主体中覆盖特征中定义的
trait A
时,如果在其他特征中使用相同的val,则在特征体中使用了什么值? / p>