Objective-C中的简单继承问题

asl*_*nci 2 inheritance message objective-c self

我有两个Objective-C类,一个派生自另一个

@interface DerivedClass : BaseClass
{
}
Run Code Online (Sandbox Code Playgroud)

下面的代码部分属于BaseClass:

- (id)init {
    if (self = [super init]) {
       [self configure]; 
    }   
    return self;
}

- (void) configure{} //this is an empty method
Run Code Online (Sandbox Code Playgroud)

代码部分属于DerivedClass:

-(void) configure{
    NSLog(@"derived configure called");
}
Run Code Online (Sandbox Code Playgroud)

现在,当我说derivedInstance = [DerivedClass new];并观察调用堆栈时,我看到configure派生类[self configure]init方法在base 方法的行中被调用.

我是一个Objective-C菜鸟,我对如何从基类的方法调用派生类的方法感到困惑." self"关键字被解释为this与某些语言的" "关键字相同,但我认为这种解释并不完全正确,对吧?

Lau*_*ren 6

[self someMessage]将消息"someMessage"发送到当前对象,这是一个实例DerivedClass.

信息分配在运行时动态进行的,所以它会表现为无论对象是在那个时候.

  • 要稍微扩展一下:如果一个类没有实现传递给它的消息,它将检查超类.这是继承的基础.在您的情况下,'self'是DerivedClass并且实现'configure',因此最终会执行.如果从派生类中删除'configure'的实现,则最终将调用超类中的实现. (4认同)