Tính đa hình Objective-C
Từ polymorphismnghĩa là có nhiều hình thức. Thông thường, tính đa hình xảy ra khi có một hệ thống phân cấp của các lớp và chúng có liên quan với nhau bởi tính kế thừa.
Tính đa hình Objective-C có nghĩa là một lệnh gọi đến một hàm thành viên sẽ khiến một hàm khác được thực thi tùy thuộc vào loại đối tượng gọi hàm.
Hãy xem xét ví dụ, chúng ta có một lớp Shape cung cấp giao diện cơ bản cho tất cả các hình dạng. Hình vuông và Hình chữ nhật có nguồn gốc từ Hình dạng lớp cơ sở.
Chúng tôi có phương thức printArea sẽ hiển thị về tính năng OOP 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;
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
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
Trong ví dụ trên, dựa trên tính khả dụng của phương thức CalculArea và printArea, phương thức trong lớp cơ sở hoặc lớp dẫn xuất được thực thi.
Tính đa hình xử lý việc chuyển đổi các phương thức giữa lớp cơ sở và lớp dẫn xuất dựa trên việc triển khai phương thức của hai lớp.