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];
// 父类的指针调用子类对象的方法,先在子类里去找,找不到就实现父类的方法
注意:子类不能增加父类没有的方法, 也就是父类方法和子类要一一对应
网友评论