Scala инициализация поведения

Пожалуйста, посмотрите на следующий код.

trait MyTrait { val myVal : String }

class MyClass extends MyTrait { val myVal = "Value" }

class MyClass2(val myVal: String) extends MyTrait 

Почему порядок инициализации отличается в случаеMyClass а такжеMyClass2? КонструкторMyClass будет как

MyClass() {
  MyTrait$class.$init$(this);
  myVal = value
}

КонструкторMyClass2 будет

MyClass2(String myVal) { this.myVal = myVal; MyTrait$class.$init$(this) }

Я думаю, что порядок инициализации должен быть какMyClass2конструктор, то же самое для обоих случаев.