- Objective-C简介
- Objective-C开发环境设置
- Objective-C程序结构
- Objective-C基本语法
- Objective-C数据类型
- Objective-C变量
- Objective-C常量
- Objective-C运算符
- Objective-C循环
- Objective-C决策
- Objective-C函数
- Objective-C块
- Objective-C数字
- Objective-C数组
- Objective-C指针
- Objective-C字符串
- Objective-C结构体
- Objective-C预处理器
- Objective-C类型定义(typedef)
- Objective-C类型转换
- Objective-C日志处理
- Objective-C错误处理
- Objective-C命令行参数
- 高级部分
Objective-C多态性
多态性这个词表示有许多形式。 通常,当存在类的层次结构并且通过继承相关时,会发生多态性。
Objective-C多态表示对成员函数的调用将导致执行不同的函数,具体取决于调用该函数的对象的类型。
考虑下面一个例子,有一个基类Shape
类,它为所有形状提供基本接口。 Square
和Rectangle
类派生自基Shape
类。
下面使用printArea
方法来展示OOP特征多态性。
#import <Foundation/Foundation.h> @interface Shape : NSObject { CGFloat area; } - (void)printArea; - (void)calculateArea; @end @implementation Shape - (void)printArea { NSLog(@"The area is %f", area); } - (void)calculateArea { } @end @interface Square : Shape { CGFloat length; } - (id)initWithSide:(CGFloat)side; - (void)calculateArea; @end @implementation Square - (id)initWithSide:(CGFloat)side { length = side; return self; } - (void)calculateArea { area = length * length; } - (void)printArea { NSLog(@"The area of square is %f", area); } @end @interface Rectangle : Shape { CGFloat length; CGFloat breadth; } - (id)initWithLength:(CGFloat)rLength andBreadth:(CGFloat)rBreadth; @end @implementation Rectangle - (id)initWithLength:(CGFloat)rLength andBreadth:(CGFloat)rBreadth { length = rLength; breadth = rBreadth; return self; } - (void)calculateArea { area = length * breadth; } @end int main(int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Shape *square = [[Square alloc]initWithSide:10.0]; [square calculateArea]; [square printArea]; Shape *rect = [[Rectangle alloc] initWithLength:10.0 andBreadth:5.0]; [rect calculateArea]; [rect printArea]; [pool drain]; return 0; }
执行上面示例代码,得到以下结果 -
2018-11-16 02:02:22.096 main[159689] The area of square is 100.000000 2018-11-16 02:02:22.098 main[159689] The area is 50.000000
在上面的示例中,calculateArea
和printArea
方法的可用性,无论是基类中的方法还是执行派生类。
多态性基于两个类的方法实现来处理基类和派生类之间的方法切换。
上一篇:Objective-C继承
下一篇:Objective-C数据封装
关注微信小程序
扫描二维码
程序员编程王