自動繼承初始化程序

Automatic Initializer Inheritance:🤔 一個子類別 (subclass) 何時會繼承母類別 (superclass) 的初始化程序❓

⭐️ 繼承規則

一般來說,subclass不會繼承 superclass 的 initializers,但如果符合以下的狀況則會自動繼承:

  1. 如果 subclass 為自己所有的屬性 (stored properties) 提供預設值 (default values),這時 superclass initializers 依然可以正常運作,因此 subclass 就會自動繼承所有的 (designated & convenience) initializers。

  2. 如果 subclass 定義了自己的屬性但卻沒有給預設值,這時會造成 superclass initializers 不知如何處理這些屬性 (因為 superclass 根本無從得知這些屬性的存在),這時 subclass 就會喪失所有的 superclass initializers。

  3. 但如果 subclass 又實作 (implement/override) 了所有的 superclass designated initializers,這時 subclass 又會重新繼承所有的 superclass convenience initializers。

Class Initializer Inheritance

⭐️ 重點整理

  • 如果 subclass 有定義自己的 convenience initializers,則上述的規則依然成立

  • 在實作 superclass designated initializers 的時候,如果用 override convenience init 的方式,而不是用 override init (override designated initializer) 的方式,可以減少 subclass designated initializers 的數量。 ➡️ convenience override

💈範例

🔗 原始碼:Repl.it

Last updated

Was this helpful?