一、objective-c中的Super的用法
super的作用
1. 直接调用父类中的某个方法
2. super处在对象方法中,那么就会调用父类的对象方法
super处在类方法中,那么就会调用父类的类方法
3. 使用场合:子类重写父类的方法时想保留父类的一些行为
1. 直接调用父类中的某个方法
2. super处在对象方法中,那么就会调用父类的对象方法
super处在类方法中,那么就会调用父类的类方法
3. 使用场合:子类重写父类的方法时想保留父类的一些行为
二、实例情境我们看如下实例:
我们准备定义一个僵尸类,然后下面的各种跳跃僵尸、舞王僵尸、铁桶僵尸会继承上面的这个僵尸类作为父类。
#import <Foundation/Foundation.h>
@interface Zoombie : NSObject // 僵尸类
- (void)walk;
+ (void)test; // 声明类方法test
- (void)test; // 声明对象方法walk和 test
@end
@implementation Zoombie
- (void)walk
{
NSLog(@"往前挪两步******"); // 对象方法walk的实现
}
+ (void)test
{
NSLog(@"Zoombie+test"); //类方法test的实现
}
- (void)test
{
NSLog(@"Zoombie-test"); //对象方法test的实现
}
@end
@interface JumpZoombie : Zoombie// 跳跃僵尸 继承了 僵尸类
+ (void)haha; //声明了类方法haha
- (void)haha2;//声明了对象方法haha2
@end
@implementation JumpZoombie
+ (void)haha // 实现类方法haha
{
[super test]; //调用super关键字,因为其处于类方法中,所以调用父类的类方法
}
- (void)haha2
{
[super test]; // 调用super关键字,因为其处于对象方法中,所以调用父类的对象方法
}
- (void)walk // 重写父类方法walk。
{
NSLog(@"跳两下"); // 因为跳跃僵尸,一般是跳两下之后,再往前走,所以需要重写该方法
[super walk]; // 此处如果写[self walk] 系统会寻找当前对象的walk方法,会死循环。
//NSLog(@"往前挪两步----"); // 走两下(直接调用父类的walk方法更方便)。
}
@end
int main()
{
//[JumpZoombie haha];
JumpZoombie *jz = [JumpZoombie new];
[jz haha2];
return 0;
}