Comportamiento de inicialización de Scala

Por favor mira el siguiente código.

trait MyTrait { val myVal : String }

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

class MyClass2(val myVal: String) extends MyTrait 

¿Por qué difiere el orden de inicialización en caso deMyClass yMyClass2? El constructor deMyClass será como

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

El constructor deMyClass2 estarán

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

Creo que el orden de inicialización debería ser comoMyClass2El constructor lo hace, lo mismo para ambos casos.

Respuestas a la pregunta(1)

Su respuesta a la pregunta