请查看以下代码.
trait MyTrait { val myVal : String }
class MyClass extends MyTrait { val myVal = "Value" }
class MyClass2(val myVal: String) extends MyTrait
Run Code Online (Sandbox Code Playgroud)
为什么初始化顺序在MyClass和MyClass2?的情况下有所不同?构造函数MyClass将为
MyClass() {
MyTrait$class.$init$(this);
myVal = value
}
Run Code Online (Sandbox Code Playgroud)
构造函数MyClass2将是
MyClass2(String myVal) { this.myVal = myVal; MyTrait$class.$init$(this) }
Run Code Online (Sandbox Code Playgroud)
我认为初始化顺序应该像MyClass2构造函数那样,两种情况都是一样的.