自動繼承初始化程序
Automatic Initializer Inheritance:🤔 一個子類別 (subclass) 何時會繼承母類別 (superclass) 的初始化程序❓
Last updated
Was this helpful?
Automatic Initializer Inheritance:🤔 一個子類別 (subclass) 何時會繼承母類別 (superclass) 的初始化程序❓
Last updated
Was this helpful?
一般來說,subclass 並不會繼承 superclass 的 initializers,但如果符合以下的狀況則會自動繼承:
如果 subclass 為自己所有的屬性 (stored properties) 提供預設值 (default values),這時 superclass initializers 依然可以正常運作,因此 subclass 就會自動繼承所有的 (designated & convenience) initializers。
如果 subclass 定義了自己的屬性但卻沒有給預設值,這時會造成 superclass initializers 不知如何處理這些屬性 (因為 superclass 根本無從得知這些屬性的存在),這時 subclass 就會喪失所有的 superclass initializers。
但如果 subclass 又實作 (implement/override) 了所有的 superclass designated initializers,這時 subclass 又會重新繼承所有的 superclass convenience initializers。
如果 subclass 有定義自己的 convenience initializers,則上述的規則依然成立。
在實作 superclass designated initializers 的時候,如果用 override convenience init
的方式,而不是用 override init
(override designated initializer) 的方式,可以減少 subclass designated initializers 的數量。
原始碼: