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]; 

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容