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

    }

  • 相关阅读:
    Centos7 安装 mysql5.7
    python正则表达式---七七八八
    爬虫之英雄联盟
    爬虫之User-Agent
    爬虫之证书错误
    ubuntu windows双系统 删除Ubuntu后windows系统引导修复
    ubuntu系統桌面重置
    ubuntu安装qtcreator
    win10/ubuntu双系统----ubuntu有线无线都不能上网
    pyenv 安装
  • 原文地址:https://www.cnblogs.com/lcl15/p/4924312.html
Copyright © 2020-2023  润新知