分类(Category)和继承(Inherit)的区别

继承(Inherit)

  • 好处:
    • 可以抽取重复代码;
    • 建立类之间的关系;
    • 子类可以拥有父类的方法和属性;
A{
  int _age
  int _name
  }

B{
  int _age
  int _name
  int _weight
 }

B : A{
 int _weight
 }
  • 注意点:

    • 不可以和父类有相同的属性;
    • 可以和父类有相同的方法;
    • 父类必须声明在子类前面
    • 调用某个方法,优先在当前对象中找,如果找不到该方法,去父类中找
  • 坏处:

    • 耦合性太强
  • 解决方案:
    • 分类 + 组合
A{
  int _age;
  int _name;
  }

B{
  // int _age;
  // int _name;
  A *a;
  int _weight;
 }

分类(Category)

  • 好处:

    • 在不改变原来的内容的基础上,可以增加一些方法;
  • 注意点:

    • 只能添加方法,不能添加属性;

    • 分类的方法中可以访问原来的成员变量;

    • 分类中可以重写原来的方法,但是会覆盖原来的方法,会导致原来的方法没办法再使用(方法优先调用步骤:本对象-->原来的类--->父类),同样是分类的话,要看哪个是最后编译的

      aceae75f-6cc3-4cf5-b56c-0f202bda3579.jpg
  • 分类也可以写在类里面(大部分写在外面)

    • 比如
    // >>>>>.h
     #import <Foundation/Foundation.h>
    @interface Cat : NSObject
    
    @end
    
    @interface Cat (Add)
    - (void)addTest;
    @end
    
    // >>>>>>.m
    #import "Cat.h"
    @implementation Cat
    
    @end
    
    @implementation Cat(Add)
    - (void)addTest
    {
    NSLog(@"分类中增加的方法");
    }
    @end
    

区别

  • 1.继承Inherit
    • 这个是面向对象语言都有的一个特性,子类会继承父类的方法和属性。
      对于以下情况,无法使用类别,必须使用继承。
      • 1)新扩展的方法与原方法同名,但是还需要使用父类的实现。因为使用类别,会覆盖原类的实现,无法访问到原来的方法。
      • 2)扩展类的属性,这个类别无法做到。
  • 2.类别category
    • 这是Objective-C语言的一个特性,可以在不改变类名和原来类的实现的前提下,实现对类的方法扩展。
      以下两种方式最好使用类别。
      • 1)针对系统提供的一些类,例如:NSString,NSArray,NSNumber等类,系统本身不提倡使用继承去扩展方法,因为这些类内部实现对继承有所限制,所以最好使用类别来进行方法扩展。
      • 2)类别支持开发人员针对自己构建的类,把相关的方法分组到多个单独的文件中,对于大型而复杂的类,这有助于提高可维护性,并简化单个源文件的管理。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 分类可以在不知道系统类源代码的情况下,为这个类添加新的方法; 分类只能添加方法,不能添加成员变量。通过分类增加的方...
    哎呦哎呦小葵花阅读 1,202评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,455评论 25 708
  • 你品味过一粒米的清香吗? 多少个晨昏月暮,田间地头,汗水和着阳光雨露,无数祈盼都包含在一颗颗种子里…… 你体会过一...
    一念之遥阅读 192评论 0 0
  • 那一年,徐宁大学毕业。随着人潮,挤上火车,从一座小城出发,向深圳进军。 望着那个鲜红的大学毕业证和一沓令徐宁骄傲无...
    碎女子阅读 316评论 0 0