从非重写方法调用重写方法使用基类实现

时间:2011-08-24 22:57:44

标签: objective-c inheritance methods

我在基类中有一个方法调用,如下所示:

#import <Foundation/Foundation.h>

@interface BaseController : NSObject

-(void)login;

@end

#import "BaseController.h"

@implementation BaseController

-(void)performTask
{
 return @"Base method loaded";
}


-(void)login
{
 [self performTask];
}


-(id)init
{
 if ((self = [super init]))
 {

 }

 return self;
}

-(void)dealloc
{
 [super dealloc];
}

@end

#import <Foundation/Foundation.h>
#import "BaseController.h"

@interface DerivedController : BaseController

-(void)performTask;

@end

#import "DerivedController.h"

@implementation DerivedController

-(void)performTask
{
 NSLog(@"Inherited method loaded.");
}

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

 return self;
}

-(void)dealloc
{
 [super dealloc];
}

@end

我想覆盖派生类中的方法performTask,并使用未更改的login方法调用重写方法。这应该很容易。我错过了什么?

2 个答案:

答案 0 :(得分:5)

只需覆盖performTask,子类实例在收到performTask消息时将自动使用自己的实现。

答案 1 :(得分:0)

如Chuck所述,只需覆盖该方法,但要注意不要在新实现中调用[super performTask]。