super的作用:
直接調(diào)用父類中的某個(gè)方法
super處在對(duì)象方法中,那么就會(huì)調(diào)用父類的對(duì)象方法,super處在類方法中就會(huì)調(diào)用父類的類方法
使用場(chǎng)合:
子類重寫父類的方法時(shí)想保留父類的一些行為
方法的重寫:
可以改變子類從父類繼承的行為
被重寫的方法定義必須與父類中的定義一致
實(shí)例:
非常出名的僵尸案例
main.m
/*
super關(guān)鍵字的作用:
1>可以直接調(diào)用父類中的某個(gè)方法(對(duì)象方法、類方法)
2>super處在對(duì)象方法中,那么就會(huì)調(diào)用父類的對(duì)象方法
3>super處在類方法中,那么就會(huì)調(diào)用父類的類方法
使用場(chǎng)合:子類重寫父類的方法時(shí)想要保留一些父類的行為
*/
/*
僵尸:
跳躍僵尸、盾牌僵尸
*/
#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];? //? 對(duì)象-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(@"挪動(dòng)了幾步,調(diào)用了父類的方法");
}
- (void)test
{
NSLog(@"調(diào)用了-test方法");
}
+ (void)test
{
NSLog(@"調(diào)用了+test方法");
}
@end
JumpZombie.h
#import <Foundation/Foundation.h>
@interface JumpZombie : Zombie
@end
JumpZombie.m
#import "JumpZombie.h"
@implementation Zombie
- (void)walk
{
NSLog(@"跳動(dòng)兩步,調(diào)用了子類的方法");
//? NSLog(@"挪動(dòng)了幾步");
[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