继承(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)
-
好处:
- 在不改变原来的内容的基础上,可以增加一些方法;
-
注意点:
只能添加方法,不能添加属性;
分类的方法中可以访问原来的成员变量;
-
分类中可以重写原来的方法,但是会覆盖原来的方法,会导致原来的方法没办法再使用(方法优先调用步骤:本对象-->原来的类--->父类),同样是分类的话,要看哪个是最后编译的
-
分类也可以写在类里面(大部分写在外面)
- 比如
// >>>>>.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)类别支持开发人员针对自己构建的类,把相关的方法分组到多个单独的文件中,对于大型而复杂的类,这有助于提高可维护性,并简化单个源文件的管理。
- 这是Objective-C语言的一个特性,可以在不改变类名和原来类的实现的前提下,实现对类的方法扩展。