lazy valを使用して、オーバーライドされたメンバー値をスーパークラス コンストラクターに伝達する方法に関するこの説明を見つけました。残念ながら、この記事では、これが機能する理由について説明していません。
変数を別の値にロックしないためには、スーパー クラス コンストラクターでの値の割り当てをスキップする必要があるため、非遅延値を 2 回割り当てることはできないため、スーパー コンストラクターでは値を使用できないことを理解しています。しかし、新しい遅延値が割り当てられる前にスーパー コンストラクターで実行されるprintlnステートメントは、どのようにしてこの新しい値を認識できるのでしょうか。実行順序について何か混乱していますか? それとも、printlnは、オブジェクトが構築された後にその引数を評価するだけですか?