强制子类重写方法

时间:2010-12-06 22:35:04

标签: objective-c inheritance override oop

我怎样才能使任何从我的基类继承的类被强制覆盖特定的方法?我不想使用协议,因为这不会使此行为自动化。

@interface MyBaseClass : NSObject 
{
}

- (void)performAnAction;

@end

@implementation MyBaseClass

- (void)performAnAction
{
    @throw([NSException exceptionWith...]);
}

@end

2 个答案:

答案 0 :(得分:46)

你究竟是什么意思,强迫他们覆盖它?如果你只是像这样实现父方法:

- (void)performAction {
    NSAssert(NO, @"The method %@ in %@ must be overridden.",
         NSStringFromSelector(_cmd), NSStringFromClass([self class]));
}

然后如果子类无法覆盖它,它将在运行时抛出异常。遗憾的是,无法在编译时强制执行此操作。

答案 1 :(得分:1)

你可以抛出异常。只要记录得很好,那么IMO就可以合理地使用异常,因为它确实是编程错误。