• OC 类的继承 方法重载重写


    资料一:

    一、类的继承

    Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序。
    Objective-c中所有类的父类是NSObject。

    Objective-c中类的继承例子:

     

       @interface Person: NSObject {    
           NSString* name;    
    
    int age;    
    
    }    
    
    - (NSString*) name;    
    
    - (int) age;    
    
    - (void) setName: (NSString*) input;    
    
    - (void) setAge: (int) input;    
    
    @end; 
    

     

    二、方法重写

    在Objective-c中,子类可继承父类中的方法,而不需要重新编写相同的方法,直接可以使用父类的方法。
    但有时我们不想使用使用父类方法,而是想作一定的修改,怎么办呢?只要将子类中书写一个与父类具有相同的方法名、返回类型和参数,就可以将将父类的方法覆盖重写。比较简单。

    三、方法重载

    在Objective-c中,方法是不能重载的。也就是说我们不能在类中定义这样的两个方法:它们的名子相同,参数个数相同,参数类型不同,不同的返回值类型。否则Xcode会报错。
    下面定义的方法是错误的:

    -(void)setX:(int)intX;  
    
    -(void)setX:(double)doubleX;
    

      

    资料二:

    1.什么是重载?oc中不存在重载。

    在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数

    C++函数名相同是函数的名称相同。参数列表不同指参数的个数或者类型不同。

    oc中函数名相同包含函数名称和所有的标签相同。oc不允许同一作用域内的同名函数,因此不允许重载。

    即不允许函数名相同,参数个数相同,但类型不同的两个函数存在。

    在oc中同一作用域内不允许相同函数名,因此oc中没有严格意义的重载。如:

    -(void) test:(int) intValue;
    -(void) test:(float) floatValue; 
    在c++中构成重载,因为函数名test重复,但参数类型不同。在oc中错误,因为函数名都是test,不构成重载
    -(void) test:(int) x andY:(int) y;
    -(void) test:(int) x andY:(double)y;//错误,还是重名了,函数名都是(test:andY:)
    -(void) test:(int) x :(double) y; //正确,名字不同  (test::)

    通过一个方法包含另一个方法,达到类似重载的功能,它们具有不同的函数名。通常用于构造函数,如:

    init()

    intwithx(){包含对init的调用}

    intwithxy().....{包含对initx的调用}

    越具体的函数可以在前面已有方法基础上建立

    2.什么是重写?

    重写发生在子类和父类之间,通过在子类中定义和父类相同方法名的方法,修改从父类继承过来的方法定义。

    重写的作用是修改从父类继承过来的方法定义。(继承只能增加,修改,不能减少或者删除父类方法)

    重写的要求:包括所有的标签相同即包括了参数个数需要相同,并且返回值要相同。

    重写之后的方法查找过程:使用子类指针调用方法时,优先选择子类方法,没有的情况下才寻找父类的方法。

    若要直接使用父类方法,使用super.体现了父子之间的多态性,如何寻找父子同名方法

     

     

  • 相关阅读:
    20170421 F110 常见问题
    BAPI_ACC_DOCUMENT_POST 解决原因代码输入问题-利用BADI
    ABAP f4帮助输入多个值
    002 MIRO发票校验采购订单项目科目分配类别检查增强-20150819
    001infor record 计划时间取值增强-20150622
    003 F-47创建预付定金请求检查增强-20150819.docx
    整理开源协议问题 GPL APACHE
    拆我的跨界手环
    ThinkPHP 的一个神秘版本 ThinkPHP 1.2
    关于 Vue 方法前面的美元符号
  • 原文地址:https://www.cnblogs.com/song-kl/p/4450374.html
Copyright © 2020-2023  润新知