1、基类ASShape
//.h
#import <Foundation/Foundation.h>
@interface ASShape : NSObject
-(void) draw;
@end
//.m
#import "ASShape.h"
@implementation ASShape
-(void) draw
{
NSLog(@"Shape:Draw");
}
@end
2、圆形ASCircle类
//.h
#import <Foundation/Foundation.h>
#import "ASShape.h"
@interface ASCircle : ASShape
-(void) draw;
@end
//.m
#import "ASCircle.h"
@implementation ASCircle
-(void) draw
{
NSLog(@"Circle:Draw");
}
@end
3、三角形ASTriangle类
//.h
#import <Foundation/Foundation.h>
#import "ASShape.h"
@interface ASTriangle : ASShape
-(void) draw;
@end
//.m
#import "ASTriangle.h"
@implementation ASTriangle
-(void) draw
{
NSLog(@"Triangle:Draw");
}
@end
4、正方形ASRetrangle类
//.h
#import <Foundation/Foundation.h>
#import "ASShape.h"
@interface ASRetrangle : ASShape
-(void) draw;
@end
//.m
#import "ASRetrangle.h"
@implementation ASRetrangle
-(void) draw
{
NSLog(@"Ret:Draw");
}
@end
5、画图ASPerson类
//.h
#import <Foundation/Foundation.h>
@class ASShape;
@interface ASPerson : NSObject
-(void)paint:(ASShape*) aShape;
@end
//.m
#import "ASPerson.h"
#import "ASRetrangle.h"
#import "ASCircle.h"
#import "ASTriangle.h"
@implementation ASPerson
-(void)paint:(ASShape*) aShape
{
[aShape draw];
}
@end
6、main.m
#import <Foundation/Foundation.h>
#import "ASShape.h"
#import "ASRetrangle.h"
#import "ASTriangle.h"
#import "ASCircle.h"
#import "ASPerson.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
ASPerson* person = [[ASPerson alloc] init];
ASCircle* circle = [[ASCircle alloc] init];
ASRetrangle* rec = [[ASRetrangle alloc] init];
ASTriangle* tri = [[ASTriangle alloc] init];
[person paint:circle];
[person paint:rec];
[person paint:tri];
[person release];
[circle release];
[rec release];
[tri release];
}
return 0;
}
打印结果
2014-12-23 14:08:41.166 test2[2107:76825] Circle:Draw
2014-12-23 14:08:41.168 test2[2107:76825] Ret:Draw
2014-12-23 14:08:41.168 test2[2107:76825] Triangle:Draw
id类型
OC的多态可以通过id来实现,只要有相同的方法,即可。
id类型是一种通用的指针类型,弱类型,编译时不进行类型检查
id类型可以用来指向属于任何类的对象
id类型的结构
typedef struct obj_object
{
Class isa;
}*id;
typedef struct objc_class * Class;
动态运行机制
动态类型识别
动态绑定
动态加载