title: Overriding members and lazy val
body: <p>I found <a href="https://github.com/paulp/scala-faq/wiki/Initialization-Order" rel="nofollow">this explanation</a> on how to propagate overriden member values to superclass constructors by using <em>lazy val</em>. Unfortunately, the article does not explain why this works.</p>
  
  <p>I understand than non-lazy values cannot be assigned twice and that therefore, no value is available in a super constructor since the value assignment in the super class constructor must be skiped in order to not lock the variable to another value. However, how can the <em>println</em> statement - which is executed in the super constructor, i.e. before the new lazy value is asigned - already know about this new value? Am I confusing something about the execution order? Or is <em>println</em> somehow only evaluating its argument after the object is constructed?</p>