隱含構(gòu)造器:
如果一個(gè)類,或是沒有存儲(chǔ)屬性策精,或是已經(jīng)初始存儲(chǔ)屬性在聲明中,并且沒有顯式構(gòu)造器崇棠,那么它就含有一個(gè)隱含構(gòu)造器init( )咽袜。
指定構(gòu)造器:
默認(rèn)情況下,類的構(gòu)造器是指定構(gòu)造器枕稀。
只要一個(gè)類含有“沒有在聲明中初始化的存儲(chǔ)屬性”询刹,那么這個(gè)類至少需要一個(gè)指定構(gòu)造器。而且當(dāng)這個(gè)類產(chǎn)生實(shí)例的時(shí)候萎坷,必須調(diào)用這些指定構(gòu)造器中的一個(gè)凹联,以初始化所有的儲(chǔ)存屬性。一個(gè)指定構(gòu)造器可能不會(huì)委托此類中的其他構(gòu)造器哆档;對(duì)于指定構(gòu)造器蔽挠,使用self.init(...)是不合法的。
便利構(gòu)造器:
關(guān)鍵字 convenience來標(biāo)記便利構(gòu)造器象泵。
它是一個(gè)委托構(gòu)造器。所以必須包含self.init(...)斟叼。
其必須調(diào)用一個(gè)本類中的指定構(gòu)造器偶惠,或者本類中的便利構(gòu)造器(這樣就形成了構(gòu)造器鏈),不管如何鏈的最后需要一個(gè)指定構(gòu)造器來結(jié)束朗涩。
//... 例子略
應(yīng)該注意到:一個(gè)構(gòu)造器可以“說”什么和什么時(shí)候“說”的規(guī)則依然適用忽孽。一個(gè)指定構(gòu)造器除初始化屬性外不可以調(diào)用self,除非該類的所有屬性已經(jīng)初始化完畢。而便利構(gòu)造器是一個(gè)委托構(gòu)造器兄一,所以直到它調(diào)用完一個(gè)指定構(gòu)造器才能使用self(而且不能夠設(shè)置一個(gè)不可改變屬性)