美文网首页
方法Method介绍:3-方法重写override

方法Method介绍:3-方法重写override

作者: 赵亦晨 | 来源:发表于2016-10-21 02:00 被阅读0次

    前言:子类可以直接继承父类中的方法,而不需要重新编写相同的方法,但有时候子类并不想原封不动的继承父类中的方法,而是希望在子类中实现一些定制功能,这时就可以对父类的方法进行方法重写或方法覆盖。

    1、方法重写的规则

    一般来说,如果希望在子类中调用父类的某个方法时,实现一些特定的功能,则可以考虑对父类的方法进行重写(当然可以考虑新增一个新的方法,在这个方法中首先调用一下父类的方法,但这样做会增加一些新方法,程序的可读性变差。)当子类需要重写父类的方法时,必须保证重写的两个方法返回值、方法名、参数列表完全一致。

    方法的重写在iOS开发中十分常见,例如,当我们新增一个自定义控制器类时,系统会自动添加一些有关控制器的方法,例如viewDidLoad,以便我们对方法进行重写。

    2、方法重写的实现

    新增一个ClassA,其中有一个printWebSite的方法,调用后会打印一个字符串,如下所示:

    #import

    @interfaceClassA:NSObject

    @property(nonatomic,copy)NSString*webSite;

    -(void)printWebSite;

    @end

    #import "ClassA.h"

    @implementationClassA

    -(void)setWebSite:(NSString*)webSite{

    //给传入的webSite添加http://前缀

    _webSite=[NSStringstringWithFormat:@"http://%@",webSite];

    }

    -(void)printWebSite{

    NSLog(@"%@",self.webSite);

    }

    @end

    新建一个ClassB,继承自ClassA,在ClassB中重写printWebSite方法,改变打印的样式,如下所示:

    #import "ClassA.h"

    @interfaceClassB:ClassA

    -(void)printWebSite;

    @end

    #import "ClassB.h"

    @implementationClassB

    -(void)printWebSite{

    NSLog(@"学习iOS的网址:%@",self.webSite);

    }

    @end

    在main()中分别调用父类和子类的printWebSite方法,如下:

    #import

    #import "ClassA.h"

    #import "ClassB.h"

    intmain(intargc,constchar*argv[]){

    @autoreleasepool{

    ClassA*classA=[[ClassAalloc]init];

    classA.webSite=@"www.hcios.com";

    [classA printWebSite];

    ClassB*classB=[[ClassBalloc]init];

    classB.webSite=@"www.hcios.com";

    [classB printWebSite];

    }

    return0;

    }

    运行结果:

    3、子类方法调用父类方法

    在实际开发过程中,子类中经常会先调用一下父类的方法,然后在进行一些定制操作,例如在控制器类的viewDidLoad方法中,都需要首先执行[super viewDidLoad],然后再对子类的viewDidLoad方法进行定制。

    接着上面的案例,对子类ClassB的printWebSite方法进行一些改进,使其首先调用一下父类的printWebSite方法,代码如下:

    #import "ClassB.h"

    @implementationClassB

    -(void)printWebSite{

    [superprintWebSite];//调用父类的方法

    NSLog(@"宏创学院网址:%@",self.webSite);

    }

    @end

    运行结果:

    相关文章

      网友评论

          本文标题:方法Method介绍:3-方法重写override

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