Принудительные классы для переопределения метода
Как я могу сделать так, чтобы любой класс, который наследует мой базовый класс, вынужден переопределить определенный метод? Я не хочу использовать протокол, потому что это не будет автоматизировать это поведение.
@interface MyBaseClass : NSObject
{
}
- (void)performAnAction;
@end
@implementation MyBaseClass
- (void)performAnAction
{
@throw([NSException exceptionWith...]);
}
@end
Ответы
Ответ 1
Как именно вы имеете в виду, заставить их переопределить его? Если вы просто реализуете родительский метод следующим образом:
- (void)performAction {
NSAssert(NO, @"The method %@ in %@ must be overridden.",
NSStringFromSelector(_cmd), NSStringFromClass([self class]));
}
тогда он выкинет исключение во время выполнения, если дочерний класс не сможет его переопределить. К сожалению, для компиляции не существует способа обеспечить соблюдение этого правила.
Ответ 2
Вы можете просто выбросить исключение. Пока это хорошо документировано, IMO это разумное использование исключений, поскольку это действительно ошибка программирования.