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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 类有三大特性:继承,封装,多态: 封装 封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制...
    _Dam0n阅读 4,357评论 0 0
  • 面向对象的三大特性: 封装继承与多态;封装是对类中的一些字段, 方法进行保护, 不被外界所访问到, 有一种权限控制...
    李小六_阅读 4,578评论 1 4
  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 6,908评论 1 6
  • 我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这三大特性是学习类的时候,必须理解的问题,既是基础...
    郑知鱼阅读 5,589评论 0 3
  • 还曾记得那个夏天 风吹散了我的头发 飘过淡淡的芬芳香 依稀记得挂在脸上 露出那灿烂的笑容 等待在停车点上 多么美好...
    c大闲人j阅读 1,337评论 0 0

友情链接更多精彩内容