ios重写父类中的方法时要先调用父类中的方法_iOS重写父类中的方法时要先调用父类中的方法的原因

更新时间:2020-04-04    来源:ios    手机版     字体:

【www.bbyears.com--ios】

现有两个类:

1.Object001继承自NSObject

#import
 
@interface Object001 : NSObject
 
//Object001的头文件,我只是在这里面声明了个方法
-(void)printfString;
 
@end
 
#import "Object001.h"
 
@implementation Object001
 
//Object001的实现文件,我实现了声明的printfString方法,这个方法的作用是在控制台上打印Object001字符串
-(void)printfString
{
    NSLog(@"Object001");
}
 
@end
2.Object002继承自Object001


#import "Object001.h"
 
@interface Object002 : Object001
//无修改
@end
 
#import "Object002.h"
 
@implementation Object002
 
-(void)printfString
{
//    [super printfString];  Object002的对象先不调用Object002父类中的方法
 
    NSLog(@"Object002");
}
 
@end

#import "ViewController.h"
#import "Object002.h"
 
@implementation ViewController
//ViewController 实现
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
 
    Object002 *object002 = [Object002 new];
    [object002 printfString];
}


控制台打印如下信息:


屏幕快照 2016-01-13 下午4.54.55

然后在Object002类中调用父类中的方法再运行一次,控制台打印如下信息:


屏幕快照 2016-01-13 下午5.02.39

对比一下就可以知道:在子类中重写父类中的方法,如果不调用父类中的方法,那么就不执行父类中的方法,就像重新写了个名字一样的方法把父类中的方法覆盖掉了一样。
举个例子:在下面两个非常常用的方法中,如果不用父类指针调用父类中的方法也能运行成功,只是这个对象少了一些行为而已,所以当重写父类中的方法时一定要先用父类指针(super)调用一下父类中的方法。


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
 
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

本文来源:http://www.bbyears.com/shoujikaifa/91922.html

热门标签

更多>>

本类排行