1.什么是重载?oc中不存在重载。
在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数
C++函数名相同是函数的名称相同。参数列表不同指参数的个数或者类型不同。
oc中函数名相同包含函数名称和所有的标签相同。oc不允许同一作用域内的同名函数,因此不允许重载。
即不允许函数名相同,参数个数相同,但类型不同的两个函数存在。
在oc中同一作用域内不允许相同函数名,因此oc中没有严格意义的重载。如:
-(void) test:(int) intValue;
-(void) test:(float) floatValue;
在c++中构成重载,因为函数名test重复,但参数类型不同。在oc中错误,因为函数名都是test,不构成重载
在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.体现了父子之间的多态性,如何寻找父子同名方法