对于面向对象语言,继承是其最大的特点,但是继承不是万能的,切继承有很多弊端。今天题主写这篇文章的目的,就是为了能让大家看到继承的不好,并用一种新的替代方式-- 协议。
继承有哪些猫病?
- 继承使得父类和子类耦合性太强
什么意思?就是说子类继承父类以后,子类对父类的依赖性太强,使得代码的可移植性,复用性太差。 - 由于iOS只能单一继承,不能多继承,所以在某些情况,使用继承不合理。
比如IronMan,他能飞,那么他应该继承Fly这个类;其次他是人类,所以他应该继承Human这个类。但是我们不能多继承,咋办捏? - 即便是单一继承,有时也不合理。
举个栗子:哈士奇,继承自Dog,Dog能跑,哈士奇继承了,但是,如果有一只哈士奇腿断了呢?这只哈士奇不能跑了怎么办?它确确实实是狗,但是如果用继承他就一定能跑。但是现在它腿断了不能跑了。这不又矛盾了吗?
放弃继承用协议吧!
那到底怎么解决呢? 首先,题主想声明一下:继承多用来定义一个类是什么;协议多用来定义一个类能做什么。这句话很关键,希望大家仔细揣摩。其次,题主的传递的核心思想就是让大家尽量少用继承,多用协议。
协议是干嘛的?就是用来解耦的,用来声明方法的。那好了,我们换协议来处理这些问题。
例如IronMan,它是个人,那么他就继承自Human;然后我们写一个Fly的协议,只要他能飞,他就遵守这个协议。
再比如:哈士奇继承自Dog,跑这个能力就用协议来定义,如果这只哈士奇能跑,就让它遵守Run这个协议,否则它就不用遵守,他就不能跑。
这样做的好处是什么?就是大大降低了代码的耦合性,提高了代码的重用性。记住:继承父类的属性(一个类是什么),扩展子类的能力(一个类做什么)。
网友评论