深入地学习OC(2)
今天我想写的是关于构造函数的知识
首先先明白以init 开头的都是构造函数,重写是子类的方法覆盖父类的方法,要求方法名和参数都相同
重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名, 但是参数却不相同,方法体也不相同。最想见的重载的例子就是类的构造函数,
//自定义构造函数
//-(id)init
-(id)intWithAge:(NSInteger)newAge andName:(NSString *)newName;
1 -(id)init{ 2 self=[super init];//父类调用自身init方法,赋值给self,即classD本身的对象 3 if(self){ 4 //此部分做所有的初始化工作 5 self.age=0; 6 self.name=@"hhh"; 7 } 8 return self;//返回初始化完成的对象本身 9 } 10 -(id)initWithAge:(NSInteger)newAge andName:(NSString *)newName{ 11 self=[super init]; 12 if(self){ 13 self.age=newAge;//形参newAge接受外部实参的值,赋值给属性age 14 self.name=newName;//形参newAge接受外部实参的值,赋值给属性name 15 } 16 return self; 17 }
上面的代码是在方法里面实现的,这里在主函数里面调用的话就要这样子写
ClassD *obj4=[[ClassD alloc]init]; /**这里调用的init方法,会优先在ClassD中找,如果找不到,往父类中找,找到的话,则优先调用自己类中的init,其它函数亦如此**/ NSLog(@"obj4.age = %ld,obj4.name = %@",obj4.age,obj4.name); ClassD *obj5=[[ClassD alloc]initWithAge:25 andName:@"Tom"]; /**在给对象初始化的工作中,直接完成参数的传递,对象会调用自己的自定义初始化函数,将实参的值传递给形参,形参再赋值给属性(见方法的实现部分)**/ NSLog(@"obj5.age = %ld,obj5.name = %@",obj5.age,obj5.name);