继承基本概念
可以利用继承来解决当前重复代码太多的问题,只要A类继承了B类,那么A类就拥有了B类的所有属性和方法(对象方法和类方法)
如果子类中有和父类同名的方法,我们称之为方法重写
注意:
继承中的方法调用顺序,如果自己有就调用自己的,如果自己没有就调用父类的
方法的调用顺序,先自己再父类,如果父类中没有,就去父类的父类中找,一直向上找,直到找到NSObject类都没有找到,则会报错
在继承中方法可以重写,但是属性(成员变量)不能被重写
缺点:
耦合性太强(依赖性太强),加入父类不能用了,子类就都不能用了
super 基本概念
super是个编译器的指令符号,只是告诉编译器在执行的时候,去调用谁
与self类似,super指向的是当前类的父类,可以使用super给父类发送消息,执行父类的方法
super在对象方法中,那么就会调用父类的对象方法。
super在类方法中,那么就会调用父类的类方法
[super say]; // 调用父类中的say方法
继承基本应用
- 定义一个Phone类,Phone类中有一个打电话的方法
- 再定义一个Iphone类和Android类分别继承Phone类
- 在Iphone类中重写了父类中的打电话方法,然后在Iphone自己的打电话方法中使用super调用了父类中的打电话的方法
#import <Foundation/Foundation.h>
// 定义父类Phone
@interface Phone:NSObject
{
int _cpu;
}
// 打电话
-(void)call:(int)number;
@end
// 实现父类Phone
@implementation Phone
// 打电话
-(void)call:(int)number{
NSLog(@"给%i打电话", number);
}
@end
// 定义一个Iphone类继承Phone类
@interface Iphone:Phone
@end
// 实现Ipone类
@implementation Iphone
// 在Iphone类中重写父类打电话的方法
-(void)call:(int)number{
// NSLog(@"给%i打电话", number);
NSLog(@"解锁");
// 使用super 调用父类中的call方法
[super call:number];
}
@end
// 定义一个Android类继承Phone类
@interface Android:Phone
@end
// 实现Android类
@implementation Android
@end
int main(int argc, const char * argv[]) {
Iphone *iphone = [Iphone new];
Android *android = [Android new];
[iphone call:1383838338]; // 给1383838338打电话
[android call:1343434334]; // 给1343434334打电话
return 0;
}