分类,扩展和继承的区别

1:分类和扩展的区别

      <1>分类:声明的时候使用格式中括号必须要有分类名称,创建完成后有两个文件夹(Person+action.h Person+action.m文件)

@interface 类名 (分类名称)
/*
   方法声明
*/
@end
@implementation 类名(分类名称)
/*
  方法实现
*/
@end
       扩展:声明的时候使用格式中括号没有东西,创建完成后只有Person_action方法
interface Person ()
/*
方法声明或者成员变量
*/
@end
            <2>:分类只能扩充方法,不能扩展属性和成员变量; 如果分类中声明了一个属性,那么分类只会生成这个属性的set、get方法声明,也就是不会有实现,所以如果使用该属性,程序将会崩溃

            扩展中声明的方法和成员变量是私有的,只有在扩展类中能调用,外部的类无法调用

例如:在分类中设置成员变量:

#import "Person.h"
@interface Person (action)
@property(copy,nonatomic)NSString *testCategory;
@end
在类别中设置成员变量:

#import "Person.h"
@interface Person ()//注意括号中没有类名称,这是与分类category的不同之处
//为Person类添加成员变量
@property(copy,nonatomic)NSString *testExtension;
@end
在Person类中初始化方法中给两个成员变量赋值,运行,显示程序崩溃:


从程序崩溃的原因可以知道分类是不能声明成员变量,设置属性的;

2:分类和继承的区别

       <1>分类增加的这些方法会成为类类型的一部分;

       继承增加的方法不会成为父类的一部分

        <2>分类增加的方法如果与类的方法同名,会覆盖原类的方法,因为Category的优先级更高

        继承中子类也会覆盖父类的方法



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值