假设有一个像这样初始化的对象
- (void)doInit
{
NSLog(@"In BaseClass init");
}
- (id)init
{
self = [super init];
[self doInit];
return self;
}
它有一个以类似方式初始化的子类
- (void)doInit
{
NSLog (@"In SubClass init");
}
- (id)init
{
self = [super init];
[self doInit];
return self;
}
现在,如果我创建一个子类的实例,那么我会收到以下输出:
In SubClass init
In SubClass init
当真的,我的意思是
In BaseClass init
In SubClass init
有没有办法标记 doInit 说它不应该被覆盖,或者我需要为子类中的所有方法创建一个唯一的名称?
我不完全确定我以前怎么没有遇到过这个问题,但是你去吧。
编辑:
我理解为什么会发生这种情况,我没想到基类能够调用被覆盖的函数。
我也不能只调用 [super doInit]; 来自 Subclass 方法,因为 BaseClass 仍然需要调用 doInit 以便创建 BaseClass 的实例仍然有效。如果我调用 [super doInit],我最终还是会调用 SubClass 的 doInit 两次。
看来答案是否定的,我只需要像 doBaseClassInit 和 doSubClassInit 一样为每个 doInit 命名。