复合,就是对象之间的组合,它不限制对象的个数,但至少有两个对象。
spa
复合时,将要复合的对象(类实例化)的头文件导入被复合的类的头文件中,并在接口中定义复合对象的对象类型和设置方法的声明。.net
具体细节用实例说明;3d
如 如今有一个汽车,它由轮胎和引擎组成orm
main.m
对象
#import <Foundation/Foundation.h>接口
#import "Car.h"get
#import "Engine.h"it
#import "Tire.h"io
int main() {class
//实例化一个Car对象
Car *car = [[Car alloc]init];
//实例化一个Engine对象
Engine *engine = [[Engine alloc]init];
// 实例化一个Tire对象
Tire *tire = [[Tire alloc]init];
//给汽车设置发动机
[car setEngine:engine];
//给汽车设置轮胎
[car setTire:tire];
//汽车调用自身接口里面的方法
[car describeCar];
}
Engine.h:
#import <Foundation/Foundation.h>
@interface Engine : NSObject
//engine的方法声明
-(NSString *) describeI;
Engine.m:
#import "Engine.h"
@implementation Engine
//engine 的方法的实现
-(NSString *)describeI
{
return @"发动机";
}
Tire.h
#import <Foundation/Foundation.h>
@interface Tire : NSObject
//tired的方法声明
-(NSString *) describeII;
@end
Tire.m:
#import "Tire.h"
@implementation Tire
//tire的方法实现
-(NSString *)describeII
{
return @"轮胎";
// 也能够返回一句话
//return @"我是一个轮胎";
}
@end
Car.h:
#import <Foundation/Foundation.h>
// 头文件中导入engine和tire
#import "Engine.h"
#import "Tire.h"
@interface Car : NSObject
{
//在Car类里面设置以类为返回类型的类属性,以前的通常是基本的几种数据类型,规则和以前设置类属性时同样。
Engine * _engine;
Tire * _tire;
}
// 设置引擎方法的声明
-(void) setEngine : (Engine *) engine;
-(Engine *) engine;
//设置轮胎方法的声明
-(void) setTire : (Tire *) tire;
-(Tire *) tire;
//设置汽车对象的方法声明
-(void) describeCar;
@end
Car.m:
#import "Car.h"
@implementation Car
//引擎方法的实现
-(void)setEngine:(Engine *)engine
{
_engine = engine;
}
-(Engine *)engine
{
return _engine;
}
//轮胎方法的实现
-(void)setTire:(Tire *)tire
{
_tire = tire;
}
-(Tire *)tire
{
return _tire;
}
//汽车对象方法的实现
-(void) describeCar
{
NSLog(@"我是一辆车,我有%@和%@.",[_engine describeI],[_tire describeII]);
}
@end