位置:首页 > 高级语言 > Objective-C在线教程 > Objective-C 多态性

Objective-C 多态性

多态是指具有多种形式。通常情况下,多态发生时,有一个类层次结构和继承关系。

Objective-C的多态是指一个成员函数调用会导致执行不同的功能,根据调用函数的对象的类型。

考虑这个例子中,我们有一类形状,提供了基本的接口,为所有的形状。Square 和Rectangle 来自基类Shape。

以下方法printArea是要显示 OOP 多态性特点。

#import <Foundation/Foundation.h>

@interface Shape : NSObject

{
    CGFloat area;
}

- (void)printArea;

@end

@implementation Shape

- (void)printArea{
    NSLog(@"The area is %f", area);
}

@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];
    Square *square = [[Square alloc]initWithSide:10.0];
    [square calculateArea];
    [square printArea];
    Rectangle *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

printArea方法的基类上是可用,在上面的例子中,无论是在基类中的方法还是执行派生类。请注意Objective-C中我们不能访问父类printArea方法,在这种情况下,方法是在派生类中实现的。

多态性处理方法基类和派生类的方法的基础上实施的两个类之间的切换。