美文网首页
继承、分类和扩展

继承、分类和扩展

作者: 菜鸡陈 | 来源:发表于2020-09-04 08:29 被阅读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部分),也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。

相关文章

  • 继承、分类和扩展

    一、继承 继承是指一个新类拥有被继承类(父类)的全部属性和方法。 继承的好处:代码重用 继承的缺点:父类的改变影响...

  • 继承、分类(类别)和扩展

    继承 继承就是子类可以继承父类的属性与方法,使用继承可以实现代码的复用,减少代码冗余,子类可以直接拥有父类...

  • 分类、继承、扩展

    ==分类== 是不能添加属性的,只能关联属性。属性包含 get,set ,成员变量,而分类里并没有可存储成员变量的...

  • iOS中分类和继承的区别

    在OC中,扩展一个类的方式有两种:继承与分类。 继承与分类最大的区别是,一般情况下,分类不能扩展属...

  • iOS的继承,分类和扩展

    继承 继承是指一个新类拥有被继承类(父类)的全部属性和方法。例如,只有继承NSObject,才有创建对象的能力。N...

  • 分类、类扩展与继承

    在OC中,扩展一个类的方式有两种,继承和分类。 分类(Category) 概念 分类(Category),是OC中...

  • 分类(Category)

    1. 继承VS分类 继承:可以用来扩展一个类,不足的地方在于高耦合性 分类:也可以,只能扩展一个类的方法,并不能在...

  • (转) iOS 继承、分类和类扩展

    一、继承 继承是指一个新类拥有被继承类(父类)的全部属性和方法。例如,只有继承NSObject,才有创建对象的能力...

  • OC总结篇 - OC基础

    变量 - 属性关键字 - 初始化方法 - 分类与扩展 - 关联对象 - 代理和通知 - 多继承 - 异步 - 控制...

  • 关联对象

    分类、类扩展、继承的总结讲述了分类,介绍到分类可以添加属性,但是属性的get、set方法需要通过runtime的关...

网友评论

      本文标题:继承、分类和扩展

      本文链接:https://www.haomeiwen.com/subject/fiywsktx.html