質問: number super.init(name) } } 私にはそれは逆に思えます。インスタンスにフィールドに値を割り当てる前にselfを作成する必要があり、そのコード印象を与える割り当ての後にのみチェーンが発生するかのように。それとは別に、スーパークラスにはサブクラスの導入された属性を読み取る法的な手段がないため、この場合の安全性は考慮されません。また、javascriptのような他の多くの言語、さらにはswiftのいくらか精神的な祖先であるobjective cでさえ、後ではなくselfにアクセスする前にチェーン呼び出しが必要です。スーパーコンストラクタを呼び出す前にフィールドを定義する必要があるというこの選択の背後にある理由は何ですか?
回答: 検討する 基本クラスで定義された仮想メソッドは、派生クラスで再定義できます。 基本クラスの請負業者は、この仮想メソッドを直接または間接的に呼び出すことができます。 redefined仮想メソッド(派生クラス内)は、派生クラスのフィールドの値が派生クラスの請負業者で正しく設定されているかどうかに依存する場合があります。 派生クラスの請負業者は、基本クラスの請負業者に設定されているフィールドに依存する基本クラスのメソッドを呼び出すことができます。 したがって仮想メソッドが許可されている場合に請負業者を安全にする単純な設計はありません、swiftは、2相初期化を必要とすることでこれらの問題を回避し、プログラマーにより良い安全性を与えます、その一方で、より複雑な言語になります。これらの問題をうまく解決できる場合は、「go」を渡さずに、phdのコレクションに直接進んでください...