OC多态

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

由于每个类都属于该类的名字空间,这使得多态称为可能。类定义中的名字和类定义外的名字并不会冲突。类的实例变量和类方法有如下特点:
和C语言中结构体中的数据成员一样,类的实例变量也位于该类独有的名字空间。
类方法也同样位于该类独有的名字空间。与C语言中的方法名不同,类的方法名并不是一个全局符号。一个类中的方法名不会和其他类中同样的方法名冲突。两个完全不同的类可以实现同一个方法。
方法名是对象接口的一部分。对象收到的消息的名字就是调用的方法的名字。因为不同的对象可以有同名的方法,所以对象必须能理解消息的含义。同样的消息发给不同的对象,导致的操作并不相同。
多态的主要好处就是简化了编程接口。它容许在类和类之间重用一些习惯性的命名,而不用为每一个新加的函数命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类的区分开来。
Objective-C支持方法名的多态,但不支持参数和操作符的多态。
在Objective-C中是通过一个叫做selector的选取器实现的。在Objective-C中,selector有两个意思, 当用在给对象的源码消息时,用来指方法的名字。它也指那个在源码编译后代替方法名的唯一的标识符。 编译后的选择器的类型是SEL有同样名字的方法、也有同样的选择器。你可以使用选择器来调用一个对象的方法。
选取器有以下特点:
* 所有同名的方法拥有同样的选取器
* 所有的选取器都是不一样的
另:
父类指针指向子类对象
1> 没有继承就没有多态
2> 父指针指向子类对象
优点:
函数/方法传入父指针, 则在调用时可以传入子类指针和父类指针
缺点:
父类类型的变量, 不能直接调用子类特有的方法
注:
//Dog *d = [Dog new];
//父类指针指向子类对象:多态
Animal *a = [Dog new];
//[a run];//父类指针调用子类的特有方法,会有警告    
Dog *d = (Dog *)a;//可以强制转换,调用子类特有的方法
[d eat];

时间: 2024-12-16 03:27:23

OC多态的相关文章

第一次接触OC多态,动态类型与动态绑定

多态:允许不同的类定义相同的方法. 动态类型:程序直到执行时才能确定所属的类. 动态绑定:程序直到执行时才能确定实际要调用的方法. id类型:一种通用的对象类型,也就是说,id可以用来存储属于任何类的对象,让不同类的输出不用特定设定,通用一个id类型就好. 多态的出现时为了让不同的类能使用同明的方法.比如add,这个让程序的可读性大大提高,也降低了编程难度.add就是+,哪种类型的+都用add标明方法,清晰易懂. 动态类型与动态绑定是为了解决随多态的便利而引起的弊端,有了动态类型与动态绑定,不用

iOS——oc——多态

我们说的oc是动态运行时语言是什么意思? 多态. 主要是将数据类型的确定由编译时,推迟到了运行时. 这个问题其实浅涉及到两个概念,运行时和多态. 简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法. 多态:不同对象以自己的方式响应相同的消息的能力叫做多态.意思就是假设生物类(life)都用有一个相同的方法-eat; 那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法. 也就是不同的对象以自己的方式响应了相

OC——多态

书接上文,上文提到继承一个很大用途的是为了更好的实现多态,现在我们就来看看OC的多态. 多态:顾名思义就是好多种状态,以前学C#时候印象最深刻的例子是好多个类共同实现同一个接口,然后把这些类的对象都装到一个集合中,然后循环遍历调用接口方法,得到的结果是不同的.我们对多态应该都有大概的印象,我们现在就来看看使用OC语言怎么实现多态. 实现多态有两种方式一种是继承父类实现,一种是实现协议实现(OC中的协议就是平时我们所说的接口):我们一个一个的看,都大同小异,我们先来看继承父类的 一.继承的实现 基

OC多态,动态类型绑定

// //  main.m //  OC7类 // //  Created by Zoujie on 15/8/23. //  Copyright (c) 2015年 Zoujie. All rights reserved. // #import <Foundation/Foundation.h> #import "Fraction.h"//导入头文件 #import "Complex.h" #define Choose  0 int main(int 

OC 多态

1 #import <Foundation/Foundation.h> 2 3 /* 4 多态 5 1.没有继承就没有多态 6 2.代码的体现:父类类型的指针指向子类对象 7 3.好处:如果函数\方法参数中使用的是父类类型,可以传入父类.子类对象 8 4.局限性: 9 1> 父类类型的变量 不能 直接调用子类特有的方法.必须强转为子类类型变量后,才能直接调用子类特有的方法 10 */ 11 12 // 动物 13 @interface Animal : NSObject 14 - (vo

为学IOS,进击中...之OC多态练习

打印机,实现多态.输入1,使用彩色打印机.输入2,使用黑白打印机 (一)main函数: #import <Foundation/Foundation.h> #import "Person.h" #import "Printer.h" #import "BlackPrinter.h" #import "ColorPrinter.h" int main(int argc, const char * argv[]) {

多态 oc

对象具备多种形态就是多态: 没有继承就没有多态: 父类指针指向子类对象:Animal *a = [Dog new]; [a eat]; 调用方法是会检测对象的真是形象: NSObject *n = [Dog new]; NSObject *n = [Animal  new]; OC是弱语法:runtime动态属性:只会出现警告,不会报错: 多态的好处: 喂狗:喂猫:可以用喂动物来代替:因为猫和狗有共同父类: 如果参数中使用的是父类类型,可以传入父类,子类对象: 多态的限制: 父类类型的变量不能用

OC基础—多态(超级简单)

前言: oc中的指针类型变量有两个:一个是编译时类型,一个是运行时类型,编译时类型由声明该变量是使用的类型决定,运行时类型由实际赋给该变量的对象决定.如果编译时类型和运行时类型不一致,就有可能出现多态. 正文: 新建一个CHPerson类 1 @interface CHPerson : NSObject 2 -(void)eat; 3 -(void)play; 4 @end 5 --------------------------------------------------------- 6

OC面向对象—多态

一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. Animal类的声明 Animal类的实现 Dog类继承自Animal类 Dog类的实现 测试程序: 二.使用注意 代码分析: Dog *d=[[Animal  alloc] init];   动物是一条狗?语义正确吗? NSString *str=[Dog  new];     狗是一个字符串?正确吗? Oc语言是