继承、分类和扩展

2020-09-04  本文已影响0人  菜鸡陈

一、继承

 继承是指一个新类拥有被继承类(父类)的全部属性和方法。

 继承的好处:代码重用

 继承的缺点:父类的改变影响所有的子类

 OC是单继承:一个类只能继承一个直接父类;

 OC是多层继承:B类继承A类,C类可以继承B类

二、分类(Category)

使用场景:在大型项目,企业级开发中多人同时维护同一个类,此时程序员A因为某项需求只想给当前类currentClass添加一个方法newMethod,那该怎么办呢?最简单粗暴的方式是把newMethod添加到currentClass中,然后直接实现该方法就OK了。但考虑到OC是单继承的,子类可以拥有父类的方法和属性。如果把newMethod写到currentClass中,那么currentClass的子类也会拥有newMethod。但真正的需求是只需要currentClass拥有newMethod,而currentClass的子类不会拥有。为了解决这个问题,就引入了分类的概念。

分类作用:扩展已有类的功能。

特点:运行时决议 可以为系统类添加分类

分类中都可以添加哪些内容:实例方法 类方法 协议 属性(原则上讲它只能添加方法, 不能添加属性,实际上可以通过其它方式添加属性)

分类做了哪些事(声明私有方法、分解体积庞大的类文件)

注意!!!不能在分类中定义与原有类同名方法,不同的分类之间也不可以有同名的方法。如果你在分类中增加了一个与原有类同名的方法,那么分类中的方法会覆盖原有类的方法。

三、扩展

特点:编译时决议

分类与扩展的区别:

①分类原则上只能增加方法(能添加属性的的原因只是通过runtime解决无setter/getter的问题而已);

②扩展不仅可以增加方法,还可以增加实例变量(或者属性),只是该实例变量默认是@private类型;

③类扩展中声明的方法没被实现,编译器会报警,但是类别中的方法没被实现编译器是不会有任何警告的。这是因为类扩展是在编译阶段被添加到类中,而类别是在运行时添加到类中。

④类扩展不能像类别那样拥有独立的实现部分(@implementation部分),也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。

上一篇 下一篇

猜你喜欢

热点阅读