从父级调用子级重写方法

时间:2013-02-25 12:17:48

标签: objective-c

我很难找到在Objective-C中实现类似抽象类的方法。

我实际上并不关心在没有子类化的情况下限制使用我的基类,我想要的只是: 我想要类A(父/基/抽象),其方法类似- (void)makeRequest,我想在类B,C,D等中将其子类化,并且调用类似- (id)getCachedResult的方法来自'A方法'。所以基本上我希望类A实现一些基本逻辑,我希望它的子类能够修改这个基本逻辑的一些细节和部分。

听起来像是一个琐事,但我不能指责在Objective-C中实现这种模式。

更新:

这是我正在尝试做的事情:

@interface A : NSObject

- (void)makeRequest;
- (NSString *)resultKey;

@property (strong) NSMutableDictionary * result;

@end

@implementation A

- (void)makeRequest
{
    self.result[self.resultKey] = @"Result";
}

- (NSString *)resultKey
{
    @throw [NSException exceptionWithName:NSInternalInconsistencyException
                                   reason:[NSString stringWithFormat:@"%@ should be overrided in subclass", NSStringFromSelector(_cmd)]
                                 userInfo:nil];
    return nil;
}

@end

/////////////////////////////

@interface B : A

@end

@implementation B

- (NSString *)resultKey
{
    return @"key";
}

@end

当我创建B类实例并试图调用它的方法- (void)makeRequest时,我得到了异常,这很明显。我想要的是一种正确设计我的类的方法。

1 个答案:

答案 0 :(得分:0)

根据要求:您应该在B的界面中声明resultKey。 : - )