Вопрос относительно подкласса - PullRequest
1 голос
/ 21 июля 2010

Это, наверное, спрашивалось раньше, но я понятия не имею, что искать. Теперь это моя иерархия: NSObject> FirstSubclass> SecondSubclass. Но я собираюсь реализовать новую функцию в своем приложении, которая требует изменения нескольких деталей в FirstSubclass при выполнении определенного условия. Так что на самом деле мне нужен подкласс между FirstSubclass и SecondSubclass, чтобы перезаписать поведение FirstSubclass. Мне не нужно перезаписывать вещи в самом SecondSubclass, но мне нужен какой-то super для всех разных подклассов SecondSubclass. Я мог бы изменить все в FirstSubclass, чтобы использовать «if then Statement» , но сначала я хотел убедиться, что другого варианта не было. Нужен ли для этого «протокол»? Как в SecondSubclass : FirstSubclasslass <WeirdThingIDontKnow>?

Ответы [ 2 ]

0 голосов
/ 21 июля 2010

Создайте новый объект, который наследуется от FirstSubclass (скажем, InBetweenSubClass) и переопределяет необходимые методы FirstSubclass. Затем измените SecondSubclass на производный от InBetweenSubClass вместо FirstSubclass.

В Objective-C нет эквивалента "переопределения", вы просто реализуете метод с той же сигнатурой, и этот метод базового класса переопределяется. Вы также можете сделать что-то подобное, если выполняется специальное условие, использовать новый метод, в противном случае используйте метод базового (супер) класса:

-(void) test
{
    if (self.specialcondition)
    {
        [self newTest];
    }
    else
    {
        [super test];
    }

}
0 голосов
/ 21 июля 2010

Похоже, вам нужно ducktyping . В цели c это может быть достигнуто с помощью respondsToSelector, performSelector или NSInvocation. Это может сильно упростить иерархию классов.

...