(больше похожего предложения)
Я хотел, чтобы программист знал, что "не звонить от ребенка", и полностью переопределил (в моем случае все еще предлагается некоторая функциональность по умолчанию от имени родителя, когда он не расширен):
typedef void override_void;
typedef id override_id;
@implementation myBaseClass
// some limited default behavior (undesired by subclasses)
- (override_void) doSomething;
- (override_id) makeSomeObject;
// some internally required default behavior
- (void) doesSomethingImportant;
@end
Преимущество состоит в том, что программист ВИДЕТ "переопределение" в объявлении и знает, что он не должен вызывать [super ..]
.
Конечно, для этого некрасиво определять отдельные типы возвращаемых данных, но это достаточно хороший визуальный совет, и вы легко можете не использовать часть "override_" в определении подкласса.
Конечно, класс все еще может иметь реализацию по умолчанию, когда расширение является необязательным. Но, как говорят другие ответы, при необходимости реализуйте исключение времени выполнения, как для абстрактных (виртуальных) классов.
Было бы неплохо иметь встроенные подсказки компилятора, подобные этой, даже подсказки, когда лучше предварительно / опубликовать вызов агрегата супер, вместо того, чтобы копаться в комментариях / документации или ... предполагать.