從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