OC 面向对象思想 继承和复合
2017-09-29 本文已影响0人
李琪_59dc
继承(is-a关系)
-
语法
@interface GoodPerson: Person //冒号代表继承
一个类继承另一个类的属性和方法
子类可以继承父类的属性和方法(非私有的)
子类实现文件中是不需要导入父类的头文件的,因为可以认为,子类头文件中已经包含了父类的头文件了。
注意:OC不支持多继承 可用协议替代 -
重写机制
一种是完全覆盖父类的方法
一种是对父类方法做进一步的补充(提倡)
子类.m实现文件中:-(void)message{ [super message]; //用super来调用父类的方法 NSLog(@"子类补充的内容"): }
-
继承的作用
统一接口
父类指针可以表示子类的对象
复合(has-a关系)
@interface Car: NSObject
@property(strong,nonatomic)Tire *tire;
严格来讲,只有对象间的组合才能叫复合,而基本类型都被认为是对象的一部分。
多文件组织方式
.h头文件中导入其他类: @class和#import的区别
- 使用的区别
- 如果只是复用中用到,@class 导入比#import更高效,在需要的地方,@class 仅仅是告诉编译器,xxx是一个类,需要一个指针指向该对象即可。另,循环引用声明文件中只能用@class
- 如果是继承自该类,还是需要#import。因为编译器需要先知道所有关于父类的信息才能成功地为其子类编译@interface部分。
- .m实现文件中,如果需要引用到被引用类的实体变量或者方法时,需要#import引入被引用类。
- 性能的区别
如果有上百个头文件都#import了同一个文件,或者这些文件依次被#import,那么一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要重新再编译一遍,这样的效率较低。相对而言,使用@class就不会出现这种问题了。