Слово полиморфизм означает наличие многих форм. Как правило, полиморфизм возникает, когда существует иерархия классов, и они связаны наследованием.
Полиморфизм Objective-C означает, что вызов функции-члена приведет к выполнению другой функции в зависимости от типа объекта, который вызывает функцию.
Рассмотрим пример, у нас есть класс Shape, который предоставляет базовый интерфейс для всех фигур. Квадрат и прямоугольник являются производными от базового класса Shape.
У нас есть метод printArea, который собирается показать о полиморфизме функции ООП.
#import <Foundation/Foundation.h> @interface Shape : NSObject { CGFloat area; } - (void)printArea; - (void)calculateArea; @end @implementation Shape - (void)printArea { NSLog(@"The area is %f", area); } - (void)calculateArea { } @end @interface Square : Shape { CGFloat length; } - (id)initWithSide🙁CGFloat)side; - (void)calculateArea; @end @implementation Square - (id)initWithSide🙁CGFloat)side { length = side; return self; } - (void)calculateArea { area = length * length; } - (void)printArea { NSLog(@"The area of square is %f", area); } @end @interface Rectangle : Shape { CGFloat length; CGFloat breadth; } - (id)initWithLength🙁CGFloat)rLength andBreadth🙁CGFloat)rBreadth; @end @implementation Rectangle - (id)initWithLength🙁CGFloat)rLength andBreadth🙁CGFloat)rBreadth { length = rLength; breadth = rBreadth; return self; } - (void)calculateArea { area = length * breadth; } @end int main(int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Shape *square = [[Square alloc]initWithSide:10.0]; [square calculateArea]; [square printArea]; Shape *rect = [[Rectangle alloc] initWithLength:10.0 andBreadth:5.0]; [rect calculateArea]; [rect printArea]; [pool drain]; return 0; }
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —
2013-09-22 21:21:50.785 Polymorphism[358:303] The area of square is 100.000000 2013-09-22 21:21:50.786 Polymorphism[358:303] The area is 50.000000
В вышеприведенном примере, основанном на доступности методов executeArea и printArea, выполняется либо метод в базовом классе, либо производный класс.
Полиморфизм обрабатывает переключение методов между базовым классом и производным классом на основе реализации метода двух классов.