构造方法:用来初始化对象的方法,是对象方法
重写构造方法的目的:为了让对象创建出来时成员变量就会有一些固定的值
重写构造方法的注意点
1.先调用父类的构造方法([super init])
2.再进行子类内部成员变量的初始化
创建对象的时候,不要再用new
Person *p = [Person new];
Person *p = [[Person alloc] init];
new的作用
Person *p2 = [p1 init]
Person *p = [[Person alloc] init];
重写-init方法
1.
2.
3.
4.
- (id)init
{
if ( self = [super init] )
{
_age = 10;
}
return self;
}
自定义构造方法的规范
父类:Person 含有的成员变量是{_name,
子类:Student 含有成员变量{ _number}
对于有继承的类,要求:变量是谁的,就由谁定义
person.h
#import
@interface Person : NSObject
@property NSString *name;
@property int age;
- (id)initWithName:(NSString *)name andAge:(int)age;
@end
person.m
#import "Person.h"
@implementation Person
- (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)initWithName:(NSString *)name andAge:(int)age andNo:(int)no;
@end
student.m
#import "Student.h"
@implementation Student
// 父类的属性交给父类方法去处理,子类方法处理子类自己的属性
- (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
#import "Person.h"
#import "Student.h"
int main(int argc, const char * argv[])
{
Student *p = [[Student alloc] initWithName:@"Jim" andAge:29 andNo:10];
NSLog(@"00000");
return 0;
}