创建了两个类A
和B
,其中B
子类A
。在尝试初始化B
时,它会调用[super init]
为什么超类A
使用孩子的B
}的printMessage
实现?
@implementation A
- (instancetype)init
{
self = [super init];
if (self) {
[self printMessage:@"Foo"];
}
return self;
}
-(void)printMessage:(NSString *)message
{
NSLog(@"From A: %@", message);
}
@end
B(子类A)的实施
@implementation B
- (instancetype)init
{
self = [super init];
if (self) {
[self printMessage:@"Bar"];
}
return self;
}
-(void)printMessage:(NSString *)message
{
NSLog(@"From B: %@", message);
}
@end
使用以下方式初始化:
B *b = [[B alloc] init]
预期产出:
From A: Foo
From B: Bar
实际输出:
From B: Foo
From B: Bar
答案 0 :(得分:1)
您正在初始化B
类型的对象。搜索方法实现从类B
开始,如果找到它们则使用重写方法,否则只返回父实现。
您的B
printMessage
必须明确调用[super printMessage: message]
才能调用它...就像调用init
一样。
尝试将其放在A
的{{1}}内以澄清事情:
init