Scala: o código pai do valor substituído é executado, mas o valor não é atribuído no pai

Executando o código abaixo:

class Parent {
  val value = {
    println("Setting value in parent")
    "ParentVal"
  }
  println(s"Parent value is ${value}")
}

class Child extends Parent {
  override val value = {
    println("Setting value in child")
    "ChildVal"
  }
  println(s"Child value is ${value}")
}

new Child

Produz esta saída:

Setting value in parent
Parent value is null
Setting value in child
Child value is ChildVal

Portanto, o código associado à atribuição de valor pai é executado, no entanto, o valor não é realmente atribuído ao pai. Posteriormente, o código filho é executado e atribui o valor conforme o esperado.

Alguém poderia explicar a cadeia de eventos aqui em um nível inferior?

questionAnswers(1)

yourAnswerToTheQuestion