22、复合方法
来源:互联网 发布:知学学院简介 编辑:程序博客网 时间:2024/05/17 03:01
继承和复合,是类与类之间两种重要的关系。接下来,我们就借用书本上的例子来介绍下复合关系。
假如我们要构建一个简单的汽车模型,那么要有一个发动机(Engine)和四个轮子(Tire)。基本定义的代码如下:
首先,先定义和简单的实现Tire类。
<span style="font-size:12px;">@interface Tire : NSObject@end //Tire@implementation Tire-(NSString *) description{ return (@"I am a tire. I last a while."); }@end</span>
在实现方法中的description没有定义,那么他是哪里来的呢?在Cocoa中,NSLog()可以使用%@格式说明符来输出对象,NSLog()将对象发送了description消息,然后对象的description方法生成一个NSString并将其返回。所以,在类中提供description方法,就可以自定义NSLog()。
然后定义和简单的实现Engine类。
<span style="font-size:12px;"> @interface Engine : NSObject @end @implementation Engine -(NSString *) description { return (@"I am an engine. Vroom!"); } @end</span>
然后定义汽车(Car)类本身。
在实现Car类的代码中,我们定义了一个类型为id的init的方法。这里的作用是:初始化实例变量,创建1个engine变量和4个tire变量。使用new创建新对象的时候,系统会自动给对象分配内存,然后自动调用init方法,使该对象进入可以使用的状态。
关于init方法中,if语句:if(self = [super init]),这个条件是什么意思呢?为了让超类(在这里是指:NSObject)将所有需要的初始化工作一次性完成。需要调用[super init]。init方法的返回值(id类型数据,即泛型对象指针)就是被初始化的对象。而将返回的结果赋值给self则是Objective-c的惯例。这样做是为了防止超类在初始化过程中返回的对象与一开始创建的不一致。
最后在main主函数中,创建一个Car对象,然后调用drive方法,代码如下:
<span style="font-size:12px;"> int main(int argc, const char * argv[]) { Car *car; car = [Car new]; [car drive]; return 0; }</span>
运行效果:
- 22、复合方法
- 一个复合查询方法
- 复合与存取方法
- 复合控件的CreateChildControls方法
- 复合主键的查询方法
- mysql设置复合主键方法
- 构造方法、类方法、类的复合
- 复合
- 复合
- 一种语言/编码检测的复合方法
- 建立复合页面的四种方法
- Object-C 中的复合和存取方法
- oracle中创建复合索引方法
- 000035:创建类主方法中创建复合语句块包含复合语句
- 自定义事件类的方法──复合EventDispatcher类
- hibernate实体—复合主键、视图的注解配置方法
- 有关json复合对象传至前台的拼接方法
- Linq 复合from子句和SelectMany扩展方法
- Sort Colors
- 并查集最简单应用_不要抽烟
- 不写js仅用css实现手风琴和选项卡效果
- 王道1026 又一版 A+B
- highcharts 图表操作实例
- 22、复合方法
- 仿网易彩票代码实现
- Linux之Makefile(变量)
- VS系列远程调试
- 忘记虚拟机密码
- 深度测试(消隐)demo
- 音视频二次开发 IP组播技术
- 需要写的学习笔记
- iOS UIWebView中javascript与Objective-C交互、获取摄像头