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;
}
oc面向对象特性: 多态的更多相关文章
- Java面向对象特性--多态
Java是一种面向对象的编程语言,面向对象的三大特性就是继承,封装,多态.下面细细说一说多态. 多态的定义:一个事物的多种形态,指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而 ...
- OC面向对象特性:封装
概念性知识 1.c语言是面向过程编程:分析解决问题的步骤,实现函数,依次调用 2.oc语言是面向对象编程:分析问题的组成的对象,协调对象间的联系和通信,解决问题 3.#include和#impo ...
- OC面向对象特性: 继承
基础知识 1.标识符是有字母,数字,下划线组成的. 2.首字母只能是字母,下划线,不能为数字. 3.标识符要做到见名之意. 4.标识符不能使用已定义的关键字和预定义标识符. 继承 继承:子类可以直接访 ...
- [.net 面向对象编程基础] (13) 面向对象三大特性——多态
[.net 面向对象编程基础] (13) 面向对象三大特性——多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...
- OC面向对象—多态
OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. ...
- OC面向对象—多态
OC面向对象—多态 一.基本概念 多态是基于继承的基础之上的,多态可以使得父类的指针指向子类的对象.如果函数或参数中使用的是父类类型,可以传入父类.子类对象,但是父类类型的变量不能直接调用子类特有的方 ...
- 李洪强iOS开发之OC面向对象—多态
OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. ...
- OC面向对象多态笔记
面向对象的多态是建立在继承上,可以说没有继承就没有多态: 多态:父类指针指向了子类的对象: int main() { //假设已定义了Animal类和它的子类Dog,那么多态的代码体现就是 Anima ...
- .NET面向对象特性之多态
.NET面向对象特性之多态 前言 上一篇总结了面向对象三大特性之一的继承,再接再厉,这一章继续总结多态.同时把继承中涉及到多态的内容进一步补充扩展.可以说“继承”是多态的根基.但继承主要关注的是“共通 ...
随机推荐
- 1025WHERE执行顺序以及MySQL查询优化器
转自http://blog.csdn.net/zhanyan_x/article/details/25294539 -- WHERE执行顺序-- 过滤比较多的放在前面,然后更加容易匹配,从左到右进行执 ...
- Excel For Java
Excel 需要了解的东西 首先是Excel是一个文件 - File,工作簿 - workbook,sheet - sheet,单元格 - cell. 然后就根据Excel是一个什么东西来创建一个Ex ...
- [转]如何判断js中的数据类型
原文地址:http://blog.sina.com.cn/s/blog_51048da70101grz6.html 如何判断js中的数据类型:typeof.instanceof. constructo ...
- jquery-jsrender使用
JsRender是一款基于jQuery的JavaScript模版引擎 特点: · 简单直观 · 功能强大 · 可扩展的 · 快如闪电 jsrender使用比较简单,本文简单结束一些常用的 使用过程 ...
- 给<tr>标签添加边框
今天做网站时发现给<tr>添加border无效.起初还以为tr不支持这个属性,百度,原来只要给<table>添加一句代码就可以了,代码如下: table{border-coll ...
- Win7另存文件没有桌面的解决方法
今日一朋友保存文件随口说了一句我那个桌面找不到了...我略感惊奇,没遇到这么个情况.决定,问度娘,在此做下记录,以便以后自己或朋友查阅. 我们在网上另存一个文件,打开另存窗口,发现没有“桌面” 在收藏 ...
- WordPress翻译中 __()、_e()、_x、_ex 和 _n 的用法及区别
编译函数 WordPress使用了下面几个函数来方便语言本地化. __() _e() _x() _ex() _n() 以上所列的函数是用来包含所需翻译的字符串的,根据字符串的不同参数和输出类型,需要使 ...
- Xcode找不到模拟器出现"My Mac"
问题如图: 步骤一. 找到target->built settings->Architectures->Base SDK, 选择你需要的版本;如果还是不行,看步骤二. 步骤二. 1) ...
- 用 unoconv 将 xls 转换成 csv
在 Linux 下,用 unoconv 将 xls 转换成 csv. unoconv -f csv -v input.xlsx
- GCD详解
什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像 NSOperationQueue,他们都允 ...