我知道超类(Person)的'init'方法可以在执行子类(Student)的'init'方法之前执行。但是为什么那两个或三个'init'(我猜NSObject的'init'可以也可以执行)可以由学生的同一个对象执行吗?
@interface Person : NSObject
@end
@implementation Person
- (id)init{
if (self = [super init]) {
NSLog(@"init--------%@",[self class]);
}
return self;
}
@end
@interface Student : Person
@end
@implementation Student
- (id)init{
if (self = [super init]) {
NSLog(@"init--------%@",[self class]);
}
return self;
}
@end
int main(int argc, const char * argv[]) {
Student *s = [Student alloc];
Student *ss = [s init];
return 0;
}
我的代码的结果:
初始化--------学生
初始化--------学生
答案 0 :(得分:2)
当你调用超类的方法时,你的类类型没有改变。当您init
Student
对象时,它会调用init
Person
,但它仍然是Student
。