對于面向?qū)ο笳Z言,繼承是其最大的特點(diǎn)吸申,但是繼承不是萬能的梗劫,切繼承有很多弊端寞奸。今天題主寫這篇文章的目的,就是為了能讓大家看到繼承的不好在跳,并用一種新的替代方式-- 協(xié)議枪萄。
繼承有哪些貓病猫妙?
- 繼承使得父類和子類耦合性太強(qiáng)
什么意思瓷翻?就是說子類繼承父類以后,子類對父類的依賴性太強(qiáng)割坠,使得代碼的可移植性齐帚,復(fù)用性太差。 - 由于iOS只能單一繼承彼哼,不能多繼承对妄,所以在某些情況,使用繼承不合理敢朱。
比如IronMan剪菱,他能飛,那么他應(yīng)該繼承Fly這個(gè)類拴签;其次他是人類孝常,所以他應(yīng)該繼承Human這個(gè)類。但是我們不能多繼承蚓哩,咋辦捏构灸? - 即便是單一繼承,有時(shí)也不合理岸梨。
舉個(gè)栗子:哈士奇喜颁,繼承自Dog,Dog能跑曹阔,哈士奇繼承了半开,但是,如果有一只哈士奇腿斷了呢次兆?這只哈士奇不能跑了怎么辦稿茉?它確確實(shí)實(shí)是狗,但是如果用繼承他就一定能跑芥炭。但是現(xiàn)在它腿斷了不能跑了。這不又矛盾了嗎恃慧?
放棄繼承用協(xié)議吧园蝠!
那到底怎么解決呢? 首先,題主想聲明一下:繼承多用來定義一個(gè)類是什么痢士;協(xié)議多用來定義一個(gè)類能做什么彪薛。這句話很關(guān)鍵茂装,希望大家仔細(xì)揣摩。其次善延,題主的傳遞的核心思想就是讓大家盡量少用繼承少态,多用協(xié)議。
協(xié)議是干嘛的易遣?就是用來解耦的彼妻,用來聲明方法的。那好了豆茫,我們換協(xié)議來處理這些問題侨歉。
例如IronMan,它是個(gè)人,那么他就繼承自Human揩魂;然后我們寫一個(gè)Fly的協(xié)議幽邓,只要他能飛,他就遵守這個(gè)協(xié)議火脉。
再比如:哈士奇繼承自Dog牵舵,跑這個(gè)能力就用協(xié)議來定義,如果這只哈士奇能跑倦挂,就讓它遵守Run這個(gè)協(xié)議棋枕,否則它就不用遵守,他就不能跑妒峦。
這樣做的好處是什么重斑?就是大大降低了代碼的耦合性,提高了代碼的重用性肯骇。記卓恕:繼承父類的屬性(一個(gè)類是什么),擴(kuò)展子類的能力(一個(gè)類做什么)笛丙。