zoukankan      html  css  js  c++  java
  • oc面向对象特性: 多态

      多态:不同对象以自己的方式响应相同的消息的能力叫做多态。

      多态的主要好处就是简化了编程接口。在类与类之间可以重复命名。

    下面的例子是一个彩色打印机和黑白打印机这两种打印机,然后Person类中有一个操作打印的方法,当然这个方法是需要打印机对象的。

    #import <Foundation/Foundation.h>

    /****************************定义一个打印机的类***************************************/

    @interface print : NSObject

     

    -(void) print;   //方法声明

     

    @end

     

    @implementation print

     

     

    -(void) print    //方法的实现

    {

     

        NSLog(@"打印");

     

    }

    @end

    /****************************定义一个打印机的类***************************************/

     

    /************************定义一个打印机的子类(彩色机)***********************************/

    @interface colorprint : print

     

    -(void) print;

     

    @end

     

    @implementation colorprint

     

    -(void) print

    {

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

     

    }

     

    @end

    /************************定义一个打印机的子类(彩色机)***********************************/

     

     

     

    /************************定义一个打印机的子类(黑色机)***********************************/

    @interface blackprint : print

     

    -(void) print;

     

    @end

     

    @implementation blackprint

     

    -(void) print

    {

     

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

    }

     

    @end

     

    /************************定义一个打印机的子类(黑色机)***********************************/

     

     

    /***********************************多态接口方法一***********************************/

    void interface(print *p)

    {

        [p print];

     

    }

    /***************************************多态接口方法一******************************/

     

     

    /***************************************多态接口方法二******************************/

    @interface people : NSObject

     

    -(void) doprint:(print *) p;

     

    @end

     

    @implementation people

     

    -(void) doprint:(print *)p

    {

        [p print];

     

    }

     

    @end

     

     

    /***************************************多态接口方法二******************************/

     

    int main(int argc, const char * argv[]) {

        @autoreleasepool {

    /*********************方法一*******************/

            print *p1=[[colorprintalloc]init];

            interface(p1);

            print *p2=[[blackprintalloc]init];

            interface(p2);

    /*********************方法一*******************/

            

    /*********************方法二*******************/

           //里的p3,p4表面上的类型是Printer,但是实际类型是子类类型,所以会调用他们自己对应的print方法。

            people *pe=[[peoplealloc]init];

            print *p3=[[colorprintalloc]init];//父类的指针指向子类的对象

            print *p4=[[blackprintalloc]init]; //这里的p3,p4表面上的类型是Printer,但是实际类型是子类类型,所以会调用他们自己对应的print方法。

            [pe doprint:p3];

            [pe doprint:p4];

            

    /*********************方法二*******************/

     

        }

        return 0;

    }

  • 相关阅读:
    PS学习【不间断在本页面更新】
    html5的css3等学习资料网页合集
    分别实现图片沿着XYZ轴旋转的动画
    css3实现循环抖动等动画
    jpg图片隐藏压缩文件
    基础知识【笔记】
    java爬虫,爬取网址、爬取视频、爬取图片
    纯js实现音乐播放的功能
    iOS
    iOS -MVC
  • 原文地址:https://www.cnblogs.com/lcl15/p/4924312.html
Copyright © 2011-2022 走看看