------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、构造方法的概念:
是一个用来初始化对象默认值的对象方法。
2、init方法的重写规则:
- (id)init
{
if ( self = [super init] )
{
_someThing = 10; // 如果初始化父类成功则给本对象的成员变量赋值
}
// 返回已经初始化完毕的本对象
return self;
}
3、自定义构造方法:
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property NSString *name;
@property int age;
/*
自定义构造方法的规范
1.一定是对象方法,一定以 "-" 开头
2.返回值一般是id类型
3.方法名一般以initWith开头
*/
- (id)initWithName:(NSString *)name;
- (id)initWithAge:(int)age;
- (id)initWithName:(NSString *)name andAge:(int)age;
@end
Person.m
#import "Person.h"
@implementation Person
- (id)initWithName:(NSString *)name
{
if ( self = [super init] )
{
_name = name;
}
return self;
}
- (id)initWithAge:(int)age
{
if ( self = [super init] )
{
_age = age;
}
return self;
}
- (id)initWithName:(NSString *)name andAge:(int)age
{
if ( self = [super init] )
{
_name = name;
_age = age;
}
return self;
}
@end
Student.h
#import "Person.h"
@interface Student : Person
@property int no;
- (id)initWithNo:(int)no;
- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no;
@end
Student.m
#import "Student.h"
@implementation Student
- (id)initWithNo:(int)no
{
if ( self = [super init] )
{
_no = no;
}
return self;
}
// 父类的属性交给父类方法去处理,子类方法处理子类自己的属性
- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no
{
// 将name、age传递到父类方法中进行初始化
if ( self = [super initWithName:name andAge:age])
{
_no = no;
}
return self;
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
int main()
{
Student *p = [[Student alloc] initWithName:@"Jim" andAge:29 andNo:10];
return 0;
}