Swift's documentationから:Swiftでイニシャライザをオーバーライドするのはなぜですか?
のObjective-Cでサブクラスとは異なり、スウィフトサブクラスはデフォルトで そのスーパークラスの初期化子を継承しません。
しかし、それは言う:あなたはスーパークラス 指定イニシャライザと一致するサブクラスの初期化子を書くとき
は、あなたが効果的に初期化子を指定 のオーバーライドを提供しています。したがって、オーバーライド 修飾子をサブクラスの初期化子定義の前に記述する必要があります。
コンストラクタが継承されていないJavaの背景から来ていますが、これはどのように正確に動作するのか分かりません。デフォルトで継承されないイニシャライザをオーバーライドするのはなぜですか?私はコンストラクタのように思えますが、初期化子は暗黙的にクラス自体の名前を付けられ、サブクラスでオーバーロードされます(たとえば、JavaのクラスDog
はコンストラクタの名前がDog
のみです)。しかし、私は親の初期化子をオーバーライドするこの考えを理解していません。
ああ、これは非常に意味がある、ありがとう!オーバーライドは、イニシャライザがスーパークラスから継承されている場合にのみ適用できます。 – rb612
はい、もっと正確であることが必要です[https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/ uid/TP40014097-CH18-NoLink_137)、 "オーバーライドされたプロパティ、メソッド、または添え字と同様に、' override'修飾子があるとSwiftはスーパークラスに指定された一致する初期化子がオーバーライドされていることを確認し、あなたの上書きイニシャライザが意図したとおりに指定されています。 – Rob