OC,类的三大特性之多态

1. 多态

父类的指针指向子类的指针

不同的子类相应父类的行为

父类:打印机

#import

@interface Printer : NSObject

- (void) print;

@end

#import "Printer.h"

@implementation Printer

- (void)print{

NSLog(@"打印机打印纸张");

}

@end

子类:黑白打印机

#import "BlackPrinter.h"

@implementation BlackPrinter

- (void)print{

NSLog(@"黑白打印机");

}

@end

子类:彩色打印机

#import "Printer.h"

@interface ColorPrinter : Printer  //修改父类的打印行为

- (void)print;

@end

#import "ColorPrinter.h"

@implementation ColorPrinter

- (void)print{

NSLog(@"彩色打印机");

}

@end

定义一个person类,来操作打印机

#import "Person.h"

@implementation Person

// - (void) printWithColor:(ColorPrinter *)colorPrint{

// [colorPrint print];

 // }

// - (void) printWithBlack:(BlackPrinter *)blackPrint{

// [blackPrint print];

// }

- (void) doPrint:(Printer *)printer{

[printer print];

}

@end

[person printWithBlack:blackPrint];//调用黑白打印机

[person printWithColor:colorPrint];//调用彩色打印机

这种的设计,缺点在于:如果添加的子类特别多,就要在.h的文件里声明很多方法

- (void) doPrint:(Printer *)printer{

[printer print];

}

这里就到了关键点,这个方法传的参数是父类,而实际传的是子类型

Printer *p1 = [[BlackPrinter alloc]init];

Printer *p2 = [[ColorPrinter alloc]init];

[person doPrint: p1]; 

[person doPrint: p2]; 

// 父类的指针调用子类对象的方法,先在子类里去找,找不到就实现父类的方法

注意:子类不能增加父类没有的方法, 也就是父类方法和子类要一一对应

你可能感兴趣的:(OC,类的三大特性之多态)