第9章 多态、动态类型和动态绑定(Objective-C 程序设计)

9.1 多态:相同的名称,不同的类

使不同的类共享相同方法名称的能力称为多态。它让你可以开发一组类,这组类中的每一个类都能响应相同的方法名。每个类定义都封装了特定方法所需的代码,这就使得它独立于其他的类定义。

9.2 动态绑定和id类型

id数据类型可以存储属于任何类的对象。

 1 id dataValue;
 2
 3 Fraction *f1 = [[Fraction alloc] init];
 4 Complex *c0 = [[Complex alloc] init];
 5
 6 dataValue = f1;
 7 [dataValue print];
 8
 9 dataValue = c0;
10 [dataValue print];

变量dataValue被声明为id对象类型,因此,dataValue可用来保存程序中任何类型的对象。务必注意,声明中并没有使用星号。

9.3 编译时和运行时检查

因为存储在id变量中的对象类型在编译时无法确定,所以一些测试推迟到运行时进行。

1 id dataValue = [[Fraction alloc] init];
2 [f1 setReal: 10.0 andImaginary 2.5];

这些代码在进行编译时并不会产生警告,因为编译器在处理源文件的时候并不知道存储在dataValue中的对象类型(即编译器并不知道Fraction对象已经存在于这个变量中)。

而当程序运行时,系统首先检查存储在dataValue中的对象类型,因为在dataValue中存储有Fraction,所以运行时系统检查并查找定义在Fraction类中的setReal:andImaginary:方法。因为未找到这个方法,所以显示前面的出错消息并且终止程序运行。

9.4  id数据类型与静态类型

将一个变量定义为特定类的对象时,使用的是静态类型。“静态”指的是对存储在变量中的对象的类型进行显示声明。这样,存储在这种形态中的对象的类是预定义的,也就是静态的。使用静态类型时,编译器尽可能确保变量的用法在程序中始终保持一致。编译器能够通过检查来确定应用于对象的方法是由该类定义的还是由该类继承的,否则它将显示警告。

不能为id变量使用点运算符,编译器会报错。

原文地址:https://www.cnblogs.com/cinvzi/p/8410885.html

时间: 2024-10-11 13:25:35

第9章 多态、动态类型和动态绑定(Objective-C 程序设计)的相关文章

Objective-C 编程全解-第04章 对象的类型和动态绑定

第04章 对象的类型和动态绑定 Objective-C的一个重要特征就是动态性,本章将对Objective-C的动态类型(dynamic typing)和动态绑定(dynamic binding)进行说明. 4.1 动态绑定 4.1.1 什么是动态绑定 Objective-C中的消息是在运行时才去绑定的.运行时系统首先会确定接受者的类型(动态类型识别),然后根据消息名在类的方法列表里选择相应的方法执行,如果没有找到就到父类中去继续寻找,假如一直找到NSObject也没有找到就要调用的方法,就会报

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

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

Objective-C之成魔之路【11-多态性、动态类型和动态绑定】

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 多态这个其它语言也有.动态类型有类似的,但不完全相同. 动态绑定别的语言也有类似,但没有objective-c用的这么多. 多态能够使来自不同类的对象定义相同名称的方法. 动态类型能使程序直到执行时才确定对象所属的类. 动态绑定则能使程序直到执行时才确定实际要调用的对象方法. 多态性是指在父类中定义的成员变量和

动态类型和动态绑定,动态载入

1.       iOS动态类型和动态绑定简述 NSObject * 也就是id类型---动态类型 动态绑定: 先明白引用多态---父类指针可以指向子类对象 方法多态: 方法名相同,方法的实现却不同 动态绑定就是当程序运行的时候,才去查找对象的类型. 一种是静态载入,一种动态载入 2.      简述你对UIView.UIWindow和CALayer的理解 UIWindow 就是程序的窗口,一个程序可以有多个窗口,但是屏幕大小限定的在同一时间内,只能显示一个窗口,窗口上面显示的UIView,可以

iOS开发笔记系列-基础3(多态、动态类型和动态绑定)

多态:相同的名称,不同的类 使不同的类共享相同方法名称的能力成为多态.它让你可以开发一组类,这组类中的每一个类都能响应相同的方法名.每个类的定义都封装了响应特定方法所需要的代码,这使得它独立于其他的类定义.这是因为Objective-C的运行时系统在执行方法时知道消息的接收者是哪个类的对象,它总是携带有关“一个对象属于哪个类”这样的信息,该信息能使系统在运行时做出决定,而不是在编译时. 动态绑定和id类型 id数据类型是一种通用的对象类型,可以用来存储属于任何类的对象.当使用id类型的时候,程序

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 动态类型,动态绑定,动态加载

Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有 动态类型(Dynamic typing) 动态绑定(Dynamic binding) 动态加载(Dynamic loading) 动态类型:程序直到执行时才能确定所属的类. id 数据类型id 通用的对象类型,可以存储任意类型的对象,id后面没有号,它本身就是个指针类似于void ,但只可以指向对象类型 静态类型与动态类型 编译期检查与运行时检查 静态类型在编译期就能检查出错误 静态类型声明代码可读性好 动态类型只有在

OC是动态运行时语言是什么意思?什么是动态识别,动态绑定?

动态: 主要是将数据类型的确定由编译时,推迟到了运行时. 这个问题其实浅涉及到两个概念,运行时和多态. 简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法. 现在,让我来想想OC的动态语言特性.OC的动态特性表现为了三个方面:动态类型.动态绑定.动态加载.之所以叫做动态,是因为必须到运行时(run time)才会做一些事情. (1)动态类型 动态类型,说简单点就是id类型.动态类型是跟静态类型相对的.像内置的明确的基本类型都属于静态类型(int.NSStrin

object-c 继承多态 动态数据类型

在c#中我们知道有继承的.同样在object-c中也有继承. 例如我们写一个人类(父),一个学生类.我们可以这么写: demo: @interface Person:NSobject{ NSString *name; int age; NSDate brithDate; } -(NSString *) getInfo(); @end @interface Student:Person{ NSString* school; } @end object-c 中  我们在上个博客中知道  在objec