iOS之Objective-C基础

iOS开发OC之super关键词

2016-03-29  本文已影响799人  geekMole

super关键词经常使用,但是概念却有时候朦朦胧胧在此故意挖个坑,体会一下绕坑的感觉

#import "ViewController.h"
#import "SubPerson.h"
void main(){
  SubPerson *p = [[SubPerson alloc] init];
  [p test];
}

#import <Foundation/Foundation.h>
@interface Person : NSObject
- (void)test;
@end
#import "Person.h"
@implementation Person
- (void)test{
    //结果验证 self -> SubPerson
    // SubPerson Person SubPerson Person
    NSLog(@"Person中的打印:%@ %@ %@ %@",[self class], [self superclass], [super class], [super superclass]);
}
@end

#import "Person.h"
@interface SubPerson : Person

@end
#import "SubPerson.h"

@implementation SubPerson
- (void)test
{
NSLog(@"SubPerson中的打印:%@ %@ %@ %@",[self class], [self superclass], [super class], [super superclass]);
    //仅仅是让子类对象调用父类的方法,并没有改变调用者的身份
    //即前面的执行对象改为自己,后面的方法替换为父类的方法来执行
    [super test];    
}
@end

最终输出结果子类打印和父类打印相同,总结:


再来一个Demo:

@implementation SuperViewController
- (void) methodB{
    NSLog(@"Super methodB.");
}
- (void) methodA{
    NSLog(@"Super methodA.");
    [self methodB];
}
@end
///////////////////////////////////////////////////////
@implementation SubViewController
- (void)viewDidLoad {
    //......
    [super methodA];
    [self methodA];
}
- (void) methodB{
    NSLog(@"Sub methodB.");
}
- (void) methodA{
    NSLog(@"Sub methodA.");
}
@end
Super methodA.
Sub methodB.
Sub methodA.
上一篇 下一篇

猜你喜欢

热点阅读