第十六條:提供“全能初始化方法”
我們把這種可為對象提供必要信息以便其能完成工作的初始化方法叫做“全能初始化方法”(designated initializer)。
如果創建類的實例的方式不止一種,那么這個類就會有多個初始化方法。
這當然會很好,不過仍然要在其中選定一個作為“全能初始化方法”,令其他初始化方法都來調用它。
于是,只有在全能初始化方法中,才會存儲內部數據。
這樣的話,當底層數據存儲機制改變時,只需要修改此方法的代碼就好,無需改動其他初始化方法。
類繼承時需要注意的一個重要問題:如果子類的全能初始化方法與超類方法的名稱不同,那么總應覆寫超類的全能初始化方法。
每個子類的全能初始化方法都應該調用其超類的對應方法,并逐層向上,然后再執行與本類有關的任務。
【要點】
在類中提供一個全能初始化方法,并于文檔里指明。其他初始化方法均應調用此方法。
若全能初始化方法與超類不同,則需覆寫超類中的對應方法。
如果超類的初始化方法不適用于子類,那么應該覆寫這個超類方法,并在其中拋出異常。