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

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

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

}

oc面向对象特性: 多态的更多相关文章

  1. Java面向对象特性--多态

    Java是一种面向对象的编程语言,面向对象的三大特性就是继承,封装,多态.下面细细说一说多态. 多态的定义:一个事物的多种形态,指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而 ...

  2. OC面向对象特性:封装

    概念性知识  1.c语言是面向过程编程:分析解决问题的步骤,实现函数,依次调用  2.oc语言是面向对象编程:分析问题的组成的对象,协调对象间的联系和通信,解决问题  3.#include和#impo ...

  3. OC面向对象特性: 继承

    基础知识 1.标识符是有字母,数字,下划线组成的. 2.首字母只能是字母,下划线,不能为数字. 3.标识符要做到见名之意. 4.标识符不能使用已定义的关键字和预定义标识符. 继承 继承:子类可以直接访 ...

  4. [.net 面向对象编程基础] (13) 面向对象三大特性——多态

    [.net 面向对象编程基础] (13) 面向对象三大特性——多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...

  5. OC面向对象—多态

    OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. ...

  6. OC面向对象—多态

    OC面向对象—多态 一.基本概念 多态是基于继承的基础之上的,多态可以使得父类的指针指向子类的对象.如果函数或参数中使用的是父类类型,可以传入父类.子类对象,但是父类类型的变量不能直接调用子类特有的方 ...

  7. 李洪强iOS开发之OC面向对象—多态

    OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. ...

  8. OC面向对象多态笔记

    面向对象的多态是建立在继承上,可以说没有继承就没有多态: 多态:父类指针指向了子类的对象: int main() { //假设已定义了Animal类和它的子类Dog,那么多态的代码体现就是 Anima ...

  9. .NET面向对象特性之多态

    .NET面向对象特性之多态 前言 上一篇总结了面向对象三大特性之一的继承,再接再厉,这一章继续总结多态.同时把继承中涉及到多态的内容进一步补充扩展.可以说“继承”是多态的根基.但继承主要关注的是“共通 ...

随机推荐

  1. Android下的数据储存方式(三)

      Android下最好的数据储存方式:关系型数据库sqlite.   数据库的创建:使用SqliteOpenHelper类 结合SqliteOpenHelper类和SQLiteDatabase类的帮 ...

  2. Beta版冲刺Day1

    会议讨论: 628:        已经成功实现了文件的上传功能,但是按钮的布局有点不好看.未完成的功能有:修改老师信息时候弹出小窗口进行修改. 601:        目前还在解决剩下的问题,比如将 ...

  3. [转]jQuery EasyUI自定义DataGrid的Editor

    原文地址:http://www.jeasyuicn.com/post-3.html 官网datagrid的api:http://jquery-easyui.wikidot.com/document:d ...

  4. Android 自定义Popupwindow 注意事项,手机和平板的区别

    首先自定义ppw是要继承Popupwindow 的 而要成功的显示出自定义的ppw就必须实现下面的三句代码 // 必要的三要素下面,不然popWind显示不出来 this.setContentView ...

  5. JavaScript写一个连连看的游戏

    天天看到别人玩连连看, 表示没有认真玩过, 不就把两个一样的图片连接在一起么, 我自己写一个都可以呢. 使用Javascript写了一个, 托管到github, 在线DEMO地址查看:打开 最终的效果 ...

  6. 强联通 HDU 2767 3836

    n个点m条边 最少需要几条边变成强连通图 设有a个结点的入读为0, b个结点的出度为0, 则 max{a, b}就是答案. 注意特殊情况: 当原图已经强连通时, 答案是0而不是1. 加一条边少一个入度 ...

  7. html-div自动撑大

    下面提供几种解决方案,以修复该问题. 1.给父容器使用display属性 div#container { display: table; /* 建议使用 */ /*或者 display: table- ...

  8. 【BZOJ-4522】密钥破解 数论 + 模拟 ( Pollard_Rho分解 + Exgcd求逆元 + 快速幂 + 快速乘)

    4522: [Cqoi2016]密钥破解 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 290  Solved: 148[Submit][Status ...

  9. springMVC-数据绑定流程

    1.Spring MVC主框架将ServletRequest对象以及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder(数据绑定器)实例对象 2.Data ...

  10. 【codevs1086】 栈

    http://codevs.cn/problem/1086/ (题目链接) 题意 给出1~n总共n个数,对它们进行入栈出栈操作,问一共有多少种不同的方案. Solution 找规律手玩前5个1 2 5 ...