OC中的分类,类扩展和继承之间的关系

基本概念

分类是在不改变源码或者不知道源码的情况下,对原类进行方法的扩充,但是不能添加属性。

类扩展是匿名的分类。

继承则是用一个新类拥有被继承类的所有非真私有的的属性和方法,并且可以对其扩展方法和属性。

详解

catgory可以容许你为一个存在的类,添加方法,甚至在你不知道源码的情况下,不能添加属性,这里指的是狭义的分类。

分类添加的方法如果和原类方法一样,则会优先调用分类的方法。因为分类加载是在代码执行之前,所以整个项目中使用到原类添加方法的地方都会调用分类新加的方法,在类扩展新添加方法不访问类的实例变量的情况下,可以不用import引入头文件的情况下使用。不同的类扩展不可以添加相同的方法。

通过category 增加到类中的方法会被这个类的所有子类继承,就和此类的其它方法一样。分类没有个数限制。


extensions是匿名的分类,是在类的实现代码块之外可以为自己添加需要的方法和属性。这些方法和属性都是私有的,只能在类的实现代码块中去掉用,外部无法使用。

异同点

分类,类扩展和继承都可以为一个类新添加方法。


分类只能添加方法不能添加成员变量。

类扩展添加的方法和成员变量都是私有的,只能在当前类的实现代码块中调用。

继承添加的方法不能成为父类的一部分。


分类添加方法和原类方法同名,则会覆盖原类的方法,并且分类的方法优先级更高。当多个分类有同名方法时,最后一个编译的会覆盖前边的。分类中,可以只定义方法但是不去实现,调用的时候,会调用最后一个编译的。

继承中子类会覆盖父类方法。

扩展中择会直接报冲突。


猜你喜欢

转载自blog.csdn.net/liuyinghui523/article/details/79416203