三十八、类别 和 协议(二)关于 类别

本文探讨了在对象导向编程中通过类别扩展对象行为的方法,包括添加新措施、避免覆盖原有措施、创建新类别以及类别间的关系。强调了在多个类别中编写相同措施的不确定性,以及如何合理地为现有类别添加新措施以避免与已有对象矛盾。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.tongwenguan.com/

关于  类别,有  几点  值得提出来。第一、虽然  通过  类别,你  能够  对同一类的每个物件所包含的变量  进行读写,但是  你  不能给  他们  添加  新的变量。万一  你  要  这么  做,你  只能  创建  一类新的物件,并且  让  这一类新的物件  被包含  在原来那类物件当中。

其次、类别中的新措施  可以覆盖  原有的措施,但是  这种编程习惯  一般来说  很糟糕。一旦  你  覆盖了  原有的措施,你  就无法  再  采取  原有的措施了。所以,你  在覆盖  原有的措施时,你  必须要将  原有措施的功能  复制下来。如果  你  真的  需要用  新的措施  覆盖  原有的措施,那么  创建  一类新的物件,并  使  其  被包含  在原来那类物件当中  则  是  明智的选择。因为  如果  这样,一旦  你  用  新的措施  覆盖了  原有的措施,你  还可以  通过关键字super  采取  原有的措施;而且  你  也不需要理解  原有的措施,你  只要  在新的措施当中  采取  原有的措施,并且  加上  新的功能  就可以了。

无论  你  想创建  多少类别  都可以。但是  如果  你  在多个类别中  编写  同一项措施,那么  运行时  实施  哪像措施  就不确定了。

与  正常的接口部分  不同,你  不需要  在一个类别中  编写  所有的措施。

记住:在类别中  编写  新的措施  从而  对  某类物件  进行扩展  不但  对  这类物件  产生影响,而且  对  包含在这类物件当中的其他类别的物件  产生影响。像  这样  给  NSObject这类物件  添加  新的措施  十分  危险,因为  其它所有类型的物件  都包含  在NSObject这类物件当中,给NSObject这类物件添加的新措施  会适用于  其它所有类型的物件。

通过添加  新的类别  给  已有的物件类型  添加  新的措施  虽然  可以很好地  实现  你的目的,但是  你  新添加的措施  很可能  与  已有的物件  矛盾。比如,Square这类物件本身  代表  正方形,但是  你  在新的类别中添加的新措施  却  可能把  Square这类物件  当作  圆  使用。这样的习惯  十分  糟糕。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值