super的作用:
直接调用父类中的某个方法
super处在对象方法中,那么就会调用父类的对象方法,super处在类方法中就会调用父类的类方法
使用场合:
子类重写父类的方法时想保留父类的一些行为
方法的重写:
可以改变子类从父类继承的行为
被重写的方法定义必须与父类中的定义一致
实例:
非常出名的僵尸案例
main.m
/*
super关键字的作用:
1>可以直接调用父类中的某个方法(对象方法、类方法)
2>super处在对象方法中,那么就会调用父类的对象方法
3>super处在类方法中,那么就会调用父类的类方法
使用场合:子类重写父类的方法时想要保留一些父类的行为
*/
/*
僵尸:
跳跃僵尸、盾牌僵尸
*/
#import <Foundation/Foundation.h>
#import "Zombie.h"
#import "JumpZombie.h"
int main(int argc, const char * argv[])
{
Zombie *z = [Zombie new];
// [z walk];
JumpZombie *jz = [JumpZombie new];
[jz walk];
[jz test]; // 对象-test方法
[JumpZombie test]; // 子类+test方法
return 0;
}
Zombie.h
#import <Foundation/Foundation.h>
@interface Zombie : NSObject
- (void)walk;
- (void)test;
+ (void)test;
@end
Zombie.m
#import "Zombie.h"
@implementation Zombie
- (void)walk
{
NSLog(@"挪动了几步,调用了父类的方法");
}
- (void)test
{
NSLog(@"调用了-test方法");
}
+ (void)test
{
NSLog(@"调用了+test方法");
}
@end
JumpZombie.h
#import <Foundation/Foundation.h>
@interface JumpZombie : Zombie
@end
JumpZombie.m
#import "JumpZombie.h"
@implementation Zombie
- (void)walk
{
NSLog(@"跳动两步,调用了子类的方法");
// NSLog(@"挪动了几步");
[super walk];
}
- (void)test
{
[super test];
}
+ (void)test
{
[super test];
}
@end
Person.h
#import <Foundation/Foundation.h>
@interface NSobject : Person
- (void)run;
@end
Person.m
#import "Person.h"
@implementation Person
- (void)run
{
NSLog(@"跑起来");
[super ]
}
@end