Переопределение метода
Переопределение метода является функцией языка, в которой класс может обеспечить реализацию метода, который уже предоставлен одним из его родительских классов. Реализация в этом классе замены (т.е. переопределения) реализация в родительском классе.
При определении метода с помощью того же имени как тот из родительского класса что новый метод заменяет наследованное определение. Новый метод должен иметь тот же тип возврата и взять то же число и тип параметров как метод, Вы являетесь переопределяющими. Вот пример:
@interface MyClass : NSObject { |
} |
- (int)myNumber; |
@end |
@implementation MyClass : NSObject { |
} |
- (int)myNumber { |
return 1; |
} |
@end |
@interface MySubclass : MyClass { |
} |
- (int)myNumber; |
@end |
@implementation MySubclass |
- (int)myNumber { |
return 2; |
} |
@end |
Если Вы создаете экземпляр MyClass
и отправьте ему a myNumber
сообщение, это возвращается 1. Если Вы создаете экземпляр MySubclass
и отправьте ему a myNumber
сообщение, это возвращается 2.
Заметьте, что метод подкласса должен иметь то же имя и список параметров как переопределенный метод суперкласса.
В дополнение к завершенной замене существующей реализации Вы могли бы хотеть расширить реализацию суперкласса. Чтобы сделать это, можно вызвать реализацию суперкласса с помощью super
ключевое слово.
В определении метода, super
относится к родительскому классу (суперкласс) текущего объекта. Вы отправляете сообщение в super
выполнить реализацию суперкласса метода. Вы часто делаете это в новой реализации того же метода для расширения его функциональности. В следующем примере, реализации myNumber
MySubclass
просто добавляет 1 к любому значению, возвращается реализацией MyClass
.
@implementation MySubclass |
- (int)myNumber { |
int subclassNumber = [super myNumber] + 1; |
return subclassNumber; |
} |
@end |