[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第九章 多态,动态类型和动态绑定
来源:互联网 发布:灭绝 丧尸屠城 知乎 编辑:程序博客网 时间:2024/04/24 12:54
Part 1. 多态:相同的名称,不同的类
- 多态:使不同的类共享相同方法名称的能力称为多态。(可以开发一组可以相应相同方法名的类)
//两个分数 Fraction *f1 = [[Fraction alloc] init]; Fraction *f2 = [[Fraction alloc] init]; Fraction *fracResult; //存储分数相加的结果 //两个复数 Complex *c1 = [[Complex alloc] init]; Complex *c2 = [[Complex alloc] init]; Complex *compResult; //存储复数相加的结果 //给分数赋值 [f1 setTo:1 over:10]; [f2 setTo:2 over:15]; //给复数赋值 [c1 setReal:18.0 andImaginary:2.5]; [c2 setReal:-5.0 andImaginary:3.2]; fracResult = [f1 add: f2];//分数的相加 compResult = [c1 add: c2];//复数的相加 add: 相同的方法名, [fracResult print];
- 及时方法名相同,系统会追踪对象属于的类,因为系统总是携带有关“一个对象属于哪个类”的信息
Part 2. 动态绑定和id类型
- id可以储存属于任何类的对象
id dataValue; //存储属于任何类的对象。 Fraction *f1 = [[Fraction alloc] init]; Complex *c1 = [[Complex alloc] init]; [f1 setTo:2 over:5]; [c1 setReal:10.0 andImaginary:2.5]; //第一个dataValue获得了一个分数 dataValue = f1; //将f1存储到dataValue中 [dataValue print]; //dataValue可用于Fraction对象的任何方法 //第一个dataValue获得了一个complex数 dataValue = c1; [dataValue print]; //调用方法的时候,首先检查dataValue中存储对象所属的类
Part 3. 静态类型
- 静态:对存储在变量中对象的类型进行显式声明。
优点:
1. 更好在程序编译阶段而不是在程序运行时指出错误
2. 提高程序的可读性,使用有意义的变量名 id f1
比较 Fraction *f1
Part 4. 动态类型的参数和返回类型
- 如果使用动态类型调用一个方法,需要注意一下规则:如果在多个类中实现名称相同的犯法,那么每个方法都必须符合各个参数的类型和返回值类型。
Part 5. 类,对象,方法从属关系的判定
Square * mySquare = [[Square alloc] init]; //isMemberOfClass: 对象和类的直接从属,不包括继承 if ([mySquare isMemberOfClass:[Square class]] == YES) //YES if ([mySquare isMemberOfClass:[Rectangular class]] == YES) //NO //isKindOfClass 对象类的(直接,间接)从属,包括继承。 if ([mySquare isKindOfClass:[Square class]] == YES) //YES if ([mySquare isKindOfClass:[Rectangular class]] == YES) //YES if ([mySquare isKindOfClass:[NSObject class]] == YES) //YES //respondsToSelector: 类,对象和类方法,方法的响应 if ([mySquare respondsToSelector:@selector(setSide:)] == YES) //YES if ([mySquare respondsToSelector:@selector(setWidth:andHeight:)] == YES) //YES if ([Square respondsToSelector:@selector(alloc)] == YES) //YES //instancesRespondToSelector 类实例是否能响应 if ([Square instancesRespondToSelector:@selector(setSide:)] == YES) //YES if ([Rectangular instancesRespondToSelector:@selector(setSide:)] == YES) //NO 方法setSide: 是Square的方法,Square是Rectanglular的子类 //isSubClassOfClass 类和子类的从属 if ([Square isSubclassOfClass:[Rectangular class]] == YES) //YES
0 0
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第九章 多态,动态类型和动态绑定
- Objective-C程序设计第九章---多态、动态类型和动态绑定
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之09-多态、动态类型和动态绑定——黑马 IOS 技术博客
- Objective-C 学习笔记 9 多态,动态类型,动态绑定
- Programming in Objective C学习笔记03——多态、动态绑定和动态类型
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第四章 数据类型和表达式
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十章 变量和数据类型
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十一章 分类和协议
- objective-c学习笔记第六章《objective-c 多态,动态类型,动态绑定与java中的区别》
- Objective-C 动态绑定 学习笔记
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第六章 选择结构
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第七章 类
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第八章 继承
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十二章 预处理程序
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十八章 复制对象
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第三章 类,对象和方法
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第四章 数据类型和表达式 课后练习题 4-10
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十五章 数字 字符串和集合
- IOS-UIview的AutoresizingMask自动伸缩解析(主要处理UIView加载出来看不见的问题)
- JVM基础:深入学习JVM堆与JVM栈
- HandlerThread初使用中遇到的一些小问题
- Android蓝牙开发实例解析(转载)
- Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第九章 多态,动态类型和动态绑定
- 不用任何math方法,实现四舍五入(新浪微博面试题)
- 论公司间的开发合作
- windows 2003建立RAID-0 RAID0-1 RAID-5 卷。(vmware环境)
- 用react native 做的一个推酷客户端
- POJ 2955 Brackets (区间dp 括号匹配)
- Vim技巧之四大模式_普通模式
- C++调用JS,可变参模板实现,方便调用(cocos2d-x)
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十章 变量和数据类型