我怎样才能使任何从我的基类继承的类被强制覆盖特定的方法?我不想使用协议,因为这不会使此行为自动化。
@interface MyBaseClass : NSObject
{
}
- (void)performAnAction;
@end
@implementation MyBaseClass
- (void)performAnAction
{
@throw([NSException exceptionWith...]);
}
@end
答案 0 :(得分:46)
你究竟是什么意思,强迫他们覆盖它?如果你只是像这样实现父方法:
- (void)performAction {
NSAssert(NO, @"The method %@ in %@ must be overridden.",
NSStringFromSelector(_cmd), NSStringFromClass([self class]));
}
然后如果子类无法覆盖它,它将在运行时抛出异常。遗憾的是,无法在编译时强制执行此操作。
答案 1 :(得分:1)
你可以抛出异常。只要记录得很好,那么IMO就可以合理地使用异常,因为它确实是编程错误。