美文网首页
OC,类的三大特性之多态

OC,类的三大特性之多态

作者: 握青春 | 来源:发表于2016-11-23 13:39 被阅读0次

    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,类的三大特性之多态

          本文链接:https://www.haomeiwen.com/subject/httvpttx.html