OC

OC中父类与子类之间相互调用

2018-06-29  本文已影响26人  飞天猪Pony

定义一个父类FatherViewController 和一个子类SonViewController,其中子类继承父类。

@interface SonViewController : FatherViewController
父类与子类中都声明一个外部方法doSomething,如下:

子类:

@interface SonViewController : FatherViewController
-(void) doSomething;
@end

方法实现:

-(void) doSomething
{
    NSLog(@"this is son funtion....");
}

父类:

@interface FatherViewController : UIViewController
-(void) doSomething;
@end

方法实现:

-(void) doSomething
{
    NSLog(@"this is father function....");
}

1、正常的实例化调用场景:

我们在另一个类中分别实例化它们,并调用如下:

SonViewController *sVC1 = [[SonViewController alloc]init];
[sVC1 doSomething];
FatherViewController *fVC2 = [[FatherViewController alloc]init];
[fVC2 doSomething];

打印的结果如下:
2018-04-22 20:50:54.775 Banksy[10645:203402] this is son funtion....
2018-04-22 20:50:54.775 Banksy[10645:203402] this is father function....

2、子类中调用自己的方法以及父类的方法场景:

实例化子类,并在子类的init方法中,调用自己和父类的方法,如下:

-(instancetype)init
{
    self = [super init];
    
    [self doSomething]; //如果子类中没有doSomething方法的实现,那么这时就会调用父类的
    [super doSomething];
    
    return self;
}

打印结果如下:
2018-04-22 20:53:57.617 Banksy[10700:205200] this is son funtion....
2018-04-22 20:53:57.617 Banksy[10700:205200] this is father function....

3、父类调用子类的方法的场景:

此时若实例化了子类,而在父类中的init方法中会调用的doSomething方法,父类调用方式如下:

- (instancetype)init
{
    self = [super init];
    
    [self doSomething];
    
    return self;
}

打印结果如下:
2018-04-22 20:57:17.329 Banksy[10754:206797] this is son funtion....

此时的[self doSomething],调用的是子类的方法,因为此时的self为SonViewController,

上一篇 下一篇

猜你喜欢

热点阅读