博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oc面向对象特性: 多态
阅读量:6917 次
发布时间:2019-06-27

本文共 2142 字,大约阅读时间需要 7 分钟。

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

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

 

下面的例子是一个彩色打印机和黑白打印机这两种打印机,然后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;

}

 

转载于:https://www.cnblogs.com/lcl15/p/4924312.html

你可能感兴趣的文章
word文档打印之后出打印报告
查看>>
SQL Server 变量名称的Collcation跟Instance还是跟当前DB?
查看>>
美商务部盛赞McAfee SiteAdvisor安全上网工具
查看>>
openstack实例热迁移
查看>>
不少朋友在安装IDES 4.71的过程中都遇到了下面的出错提示:
查看>>
机房出现新问题,大家请注意!征求答案中
查看>>
windows 2012 如何给web server自己签发证书
查看>>
Validating Common Form Input - Part 2 Validating a username
查看>>
OpenStack参考架构的搭建经验
查看>>
webService——wsimport命令建立webService本地客户端
查看>>
另眼看SAP应用
查看>>
走近复杂数据库计算型软件的设计与制作(5)—存储过程的设计
查看>>
随机密码生成器
查看>>
用Python开发主机批量管理工具
查看>>
Oracle备份恢复五(数据泵)
查看>>
excel将宏保存到个人工作簿
查看>>
Mono 1.2.5 发布,提供对IronPython和DLR的支持
查看>>
Docker 镜像的推送(六)
查看>>
【.Net Micro Framework PortingKit – 09】串口驱动
查看>>
SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数
查看>>