Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Переопределение  методов Objective-C

0

Итак, при отправке сообщения поиск метода С указанным именем начинается с класса объекта и переходит вверх по цепочке наследования. Выполняется первая найденная реализация; это означает, что унаследованные методы можно переопределять пользовательским реализациями. Допустим, вы решили, что индекс массы тела работников всегда должен быть равен 19. для этого метод bodyMassIndex можно переопределить в классе Employee. Откройте файл Employee.m и внесите изменения:

#import "Employee.h"

@implementation Employee

@synthesize employeeID;

-­‐      (float)bodyMassIndex

{

}

@end

return 19.0;

Постройте и запустите программу. Обратите внимание: выполняется наша новая реализация bodyMassIndex, а не реализация класса Person.

Метод bodyMassIndex реализован в Employee. т, но он не объявляется в файле Employee.h. Объявление метода в заголовочном файле публикует информацию о методе, чтобы он мог вызываться экземплярами других классов. Но поскольку Employee  наследует  от  Person,  все  классы  уже  знают,  что  экземпляры  Employee содержат метод bodyMassIndex. Сообщать об этом заново не нужно.

super

А если вы решили, что у всех работников ИМТ, вычисленный в реализации Person, должен автоматически уменьшаться на 10%? Конечно, можно продублировать код в реализации Employee, но гораздо удобнее было бы вызвать версию bodyMassIndex класса Person и умножить результат на 0,9, прежде чем возвращать его. Для решения этой задачи используется директива super. Попробуем использовать ее в Employee.m:

#import "Employee.h"

@implementation Employee

@synthesize employeeID;

-­‐      (float)bodyMassIndex

{

float normalBMI = [super bodyMassIndex]; return normalBMI * 0.9;

}

@end

Постройте и запустите программу.

Точнее говоря, директива super означает: «Вьполнитъ этот метод, но начать поиск реализации с моего супер класса».

Упражнение

Это упражнение строится на базе упражнения из предыдущей главы. Создайте класс ForeignStockHolding, наследующий от StockHolding. Включите в ForeignStockHolding дополнительную переменную экземпляра conversionRate, относящуюся к типу float. (Умножая курс перевода conversionRate на местную цену, мы получаем цену в долларах США. Будем считать, что purchasePrice и currentPrice задаются в местной валюте.) Переопределите costlnDollars и valuelnDollars, чтобы они правильно работали.

В   функции   main()   включите   в   свой   массив   несколько   экземпляров

ForeignStockHolding.

Рис. 18.3. Объекты StockHolding и ForeignStockHolding

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии