[Objective-C语言教程]动态绑定(32)
动态绑定确定在运行时而不是在编译时调用的方法。 动态绑定也称为后期绑定。 在Objective-C中,所有方法都在运行时动态解析。执行的确切代码由方法名称(选择器)和接收对象确定。
动态绑定可实现多态性。例如,考虑一组对象,包括Rectangle
和Square
。 每个对象都有自己的printArea
方法实现。
在下面的代码片段中,表达式[anObject printArea]
执行的实际代码是在运行时确定的。 运行时系统使用方法运行的选择器来识别anObject
的任何类中的适当方法。
下面来看一下解释动态绑定的简单代码 -
1 #import <Foundation/Foundation.h> 2 3 @interface Square:NSObject { 4 float area; 5 } 6 7 - (void)calculateAreaOfSide:(CGFloat)side; 8 - (void)printArea; 9 @end 10 11 @implementation Square 12 - (void)calculateAreaOfSide:(CGFloat)side { 13 area = side * side; 14 } 15 16 - (void)printArea { 17 NSLog(@"The area of square is %f",area); 18 } 19 20 @end 21 22 @interface Rectangle:NSObject { 23 float area; 24 } 25 26 - (void)calculateAreaOfLength:(CGFloat)length andBreadth:(CGFloat)breadth; 27 - (void)printArea; 28 @end 29 30 @implementation Rectangle 31 32 - (void)calculateAreaOfLength:(CGFloat)length andBreadth:(CGFloat)breadth { 33 area = length * breadth; 34 } 35 36 - (void)printArea { 37 NSLog(@"The area of Rectangle is %f",area); 38 } 39 40 @end 41 42 int main() { 43 Square *square = [[Square alloc]init]; 44 [square calculateAreaOfSide:8.0]; 45 46 Rectangle *rectangle = [[Rectangle alloc]init]; 47 [rectangle calculateAreaOfLength:10.0 andBreadth:20.0]; 48 49 NSArray *shapes = [[NSArray alloc]initWithObjects: square, rectangle,nil]; 50 id object1 = [shapes objectAtIndex:0]; 51 [object1 printArea]; 52 53 id object2 = [shapes objectAtIndex:1]; 54 [object2 printArea]; 55 56 return 0; 57 }
执行上面示例代码,得到以下结果 -
1 2018-11-16 03:16:53.399 main[53860] The area of square is 64.000000 2 2018-11-16 03:16:53.401 main[53860] The area of Rectangle is 200.000000
正如在上面的示例中所看到的,printArea
方法是在运行时动态选择调用的。 它是动态绑定的一个示例,在处理类似对象时在很多情况下非常有用。
转载于:https://www.cnblogs.com/strengthen/p/10572088.html
[Objective-C语言教程]动态绑定(32)相关推荐
- c语言教程常用32,几个常用运算符
C语言中唯一一个三元运算符,? :,注意,这个运算符是三元运算符,由问号?和冒号两个符号组成,两个符号将空间分成三部分,分别放三个数据,用法为: 条件 ? 条件成立的返回值Y : 条件不成立的返回值N ...
- Xamarin XAML语言教程通过ProgressTo方法对进度条设置
Xamarin XAML语言教程通过ProgressTo方法对进度条设置 在ProgressBar中定义了一个ProgressTo方法,此方法也可以用来对进度条当前的进行进行设置,ProgressTo ...
- Xamarin XAML语言教程使用方法设置进度条进度
Xamarin XAML语言教程使用方法设置进度条进度 在ProgressBar中定义了一个ProgressTo方法,此方法也可以用来对进度条当前的进行进行设置,ProgressTo与Progress ...
- Swift2.0语言教程之类的属性
Swift2.0语言教程之类的属性 类 虽然函数可以简化代码,但是当一个程序中出现成百上千的函数和变量时,代码还是会显得很混乱.为此,人们又引入了新的类型--类.它是人们构建代码所用的一种通用.灵活的 ...
- Swift2.0语言教程之函数嵌套调用形式
Swift2.0语言教程之函数嵌套调用形式 Swift2.0语言函数嵌套调用形式 在Swift中,在函数中还可以调用函数,从而形成嵌套调用.嵌套调用的形式往往有两种:一种是在一个函数中调用其他函数:另 ...
- c语言如何存储已编译内容,二级C语言教程章节测试13.编译预处理和动态存储分配...
一.选择题 (1)有以下程序 main() { char p[]={'a', 'b', 'c'}, q[]="abc"; printf("%d %d\n", s ...
- 新概念51单片机C语言教程纠错(1)
寒假突发奇想学了一下51单片机,以前一直在用32系列,这一次用的是郭天祥新概念51单片C语言教程,发现里面一处错误,先写下来以免以后忘掉. 正文第34页讲了如何对单片机总线编码,用了一个单片机控制8个 ...
- win10、win7系统64位oracle11g安装教程以及32位plsql连接教程
win10.win7系统64位oracle11g安装教程以及32位plsql连接教程 转载cxin917 最后发布于2016-02-05 14:16:55 阅读数 24354 收藏 展开 win10 ...
- C 语言教程详解——入门到精通
C 语言是一种通用的.面向过程式的计算机程序设计语言.1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言. C 语言是一种广泛使用的计算机语言,它与 J ...
最新文章
- 开源监控解决方案Nagios+Cacti+PNP4Nagios+NConf+NDOUtils+Nagvis(六)ndoutils安装
- VS 的makefile工程
- mysql默认几个库_MySQL 安装初始化mysql后,默认几个库介绍
- Python Tkinter 常用控件空间位置摆放
- 解决Sublime Text打开C++文件出现中文乱码
- 电子科技大学计算机读博好毕业,高产博士生读博一年达毕业要求:写论文不无聊...
- Visual Studio Code快速删除空行及几个常用快捷键总结
- 环境变量environ
- BAT文件执行完成后如何删除自身的解决办法
- numpy ndarray可用的常规函数
- elasticsearch6.x.x logstash6.x.x kibana6.x.x Filebeat6.x 配置及安装 CentOS7.3或更高
- CTCS列控系统原理--详细学习笔记
- python基础入门(超详细)
- 需求分析-4 用例分析
- Typora 自定义皮肤
- 游戏分类与热点探索——【作业1】
- Hulu推荐 | 五年口碑依旧百分百好评?《汉密尔顿》上线Disney+
- Swift - 微信聊天群头像实现 (群聊的组合头像)
- 《Android Studio 实战》总结一
- ~2 ccf 2022-03-1 未初始化警告
热门文章
- vue-环境变量和模式
- linux的xmgrace无法运行,科学网—安装xmgrace - 林绪波的博文
- js保留两位小数的函数_使用率低但功能强大的6个Excel函数公式应用技巧解读!...
- html日期选择框_第十课 日期选择框(datepicker)的操作
- css3-12 transition+css或transform实现过渡动画
- Effective C++ 条款21
- [REGEX] 匹配任意字符(包括换行符)
- VS2012 发布网站步骤
- 注册COM组件cmd(管理员权限)
- SharePoint中的权限体系