Подтвердить что ты не робот

Objective-C - метод переопределения в подклассе

У меня возникают проблемы с вычислением часа, чтобы точно переопределить метод в одном из моих подклассов.

У меня есть подкласс (ClassB) другого пользовательского класса (ClassA):

@interface ClassB : ClassA {
}

и внутри ClassA существует метод, называемый:

-(void)methodName;

который срабатывает правильно.

Однако мне нужен этот метод для запуска в ClassB.

Я попытался реализовать (в ClassB):

-(void)methodName {
  [super methodName];
}

но он все равно не срабатывает в ClassB.

Как я могу переопределить имя метода, чтобы оно срабатывало в ClassB?

4b9b3361

Ответ 1

Вы просто добавляете свой собственный код в методName в classB:

- (void)methodName
{
    // custom code

    // call through to parent class implementation, if you want
    [super methodName];
}

Ответ 2

Сначала убедитесь, что ваш метод init создает объект ClassB, а не объект ClassA (или что-то еще).

Затем, если вы хотите создать совершенно другой метод methodB (void) methodName: тот, который найден в классе A, это способ:

Супер - суперкласс. Вызывая [super methodName], вы запрашиваете у ClassA собственное имя метода. Если вы хотите полностью переопределить методName из класса A, просто не называйте super.

Итак, в основном, в вашей реализации классаB имя метода:

-(void)methodName {
  // Remove [super methodName]
  // Insert the code you want for methodName in ClassB
}

Не стесняйтесь читать Сообщения для себя и супер в Apple. <Язык > Язык программирования Objective-C.

Ответ 3

Пишем:

-(void)methodName {
  [super methodName];
}

Расскажите компилятору: при выполнении методаName класса B вызовите методName своего суперкласса (класс A). Поэтому, если вы хотите, чтобы класс B выполнял что-то другое, вам нужно написать код, который приведет к другому поведению. Вот так:

-(void)methodName {
  NSLog(@"Hello, world!");
}

Теперь, вызывая методName класса B "Привет, мир!" будет напечатана на консоли.

Ответ 4

-(void)methodName {
  [super methodName];
}

Хотите вызвать методName (в ClassB), просто удалите [super method], тогда вы можете его запустить. Причина super - вызов класса ClassA

Ответ 5

Хотя этот вопрос слишком стар, но есть некоторые ученики, поскольку каждый эксперт был, Ниже приводится ссылка на документацию Apple. "Новый метод должен иметь один и тот же тип возврата и принимать те же самые числа и типы параметров, что и метод, который вы переопределяете". полный ответ можно найти в Apple, переопределяющая документацию  Надеюсь, это поможет кому-то.