Ziel-C-Polymorphismus

Das Wort polymorphismbedeutet, viele Formen zu haben. In der Regel tritt Polymorphismus auf, wenn es eine Hierarchie von Klassen gibt, die durch Vererbung miteinander verbunden sind.

Objective-C-Polymorphismus bedeutet, dass ein Aufruf einer Mitgliedsfunktion dazu führt, dass je nach Objekttyp, der die Funktion aufruft, eine andere Funktion ausgeführt wird.

Betrachten Sie das Beispiel, wir haben eine Klasse Form, die die grundlegende Schnittstelle für alle Formen bereitstellt. Quadrat und Rechteck werden von der Basisklasse Form abgeleitet.

Wir haben die Methode printArea, die über die OOP-Funktion angezeigt wird polymorphism.

#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;
}

Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:

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

Im obigen Beispiel wird basierend auf der Verfügbarkeit der Methoden berechneArea und printArea entweder die Methode in der Basisklasse oder die abgeleitete Klasse ausgeführt.

Polymorphismus behandelt das Umschalten von Methoden zwischen der Basisklasse und der abgeleiteten Klasse basierend auf der Methodenimplementierung der beiden Klassen.