美文网首页OC
OC中父类与子类之间相互调用

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

作者: 飞天猪Pony | 来源:发表于2018-06-29 15:36 被阅读26次

    定义一个父类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,

    相关文章

      网友评论

        本文标题:OC中父类与子类之间相互调用

        本文链接:https://www.haomeiwen.com/subject/kbyayftx.html