正所谓复合,便是定义的这个类中的成员是另外类的实例方法。

也就是把其他对象作为自身的题部分,以提升自身的功能,

就相当于C语言中的函数嵌套。下面是一段代码(多个文件放在一块了):

 /***Computer类的声明***Computer类的声明***Computer类的声明***/
#import <Foundation/Foundation.h> @interface Computer : NSObject @property (nonatomic, strong) NSString *brand;//声明一个字符串对象属性brand @end /***Computer类的实现***Computer类的实现***Computer类的实现***/
#import "Computer.h" @implementation Computer @end /***Desk类的声明***Desk类的声明***Desk类的声明***/ #import <Foundation/Foundation.h> @interface Desk : NSObject @property (nonatomic, strong) NSString *color;//声明一个字符串对象属性color @end /***Desk类的实现***Desk类的实现***Desk类的实现***/ #import "Desk.h" @implementation Desk @end /***ClassRoom类的声明***ClassRoom类的声明***ClassRoom类的声明***/ #import <Foundation/Foundation.h>
#import "Desk.h"
#import "Computer.h" @interface ClassRoom : NSObject
@property (nonatomic, strong) Desk *desk;//声明一个Desk的对象desk的属性 这里用的就是复合
@property (nonatomic, strong) Computer *computer;////声明一个Computer的对象computer的属性这里用的也是复合
@end /***ClassRoom类的实现***ClassRoom类的实现***ClassRoom类的实现***/ #import "ClassRoom.h"
@implementation ClassRoom
-(NSString *)description{ //库方法,方法的重写
NSString *str = [NSString stringWithFormat/*方法*/:@"我们的教室有%@的桌子,%@电脑",self/*当前方法的调用者-ClassRoom*/.desk.color,self.computer.brand];
return str;
}
@end /***主函数***主函数***主函数***主函数***主函数***主函数***主函数*/ #import <Foundation/Foundation.h>
#import "ClassRoom.h" int main(int argc, const char * argv[]) {
@autoreleasepool { ClassRoom *classRoom = [[ClassRoom alloc] init];
Desk *de= [[Desk alloc] init];
classRoom.desk = de;//给对象的属性(类的对象)赋值,先初始化该属性
classRoom.desk.color = @"褐色";//给属性的属性赋值 Computer *com = [[Computer alloc] init];
com.brand = @"黑苹果";//对象完全初始化之后,再给其所属的对象赋值
classRoom.computer = com; NSLog(@"%@",classRoom);
}
return 0;
}

另一个例子:

 #import <Foundation/Foundation.h>
//门类
@interface Door:NSObject
-(void)open;
-(void)close;
@property(nonatomic,strong)NSString *replace; //实现更换门
@end
@implementation Door
-(void)open
{
NSLog(@"开门");
}
-(void)close
{
NSLog(@"关门");
}
-(void)color
{
NSLog(@"门得颜色%@",self.replace);
}
@end //窗户类
@interface Window:Door
@end
@implementation Window
-(void)open
{
NSLog(@"开窗");
}
-(void)close
{
NSLog(@"关窗");
}
@end
//房屋类
@interface Housing:NSObject
//{
// Door *door;//门
// Window *window;//窗户
//}
@property(nonatomic)Door *door;//门
@property(nonatomic)Window *window;//窗户
-(void)InAndOut;//进出方法
-(void)takeAbreath;//换气方法
@end
@implementation Housing
-(void)InAndOut
{
// door = [[Door alloc] init];
NSLog(@"进屋");
[_door open];
NSLog(@"出屋");
[_door close];
}//进出方法
-(void)takeAbreath
{
// window = [[Window alloc] init ];
[_window open];
NSLog(@"进气");
NSLog(@"出气");
[_window close];
}//换气方法 @end
int main(int argc, const char * argv[])
{
@autoreleasepool
{
Housing *housing = [[Housing alloc] init]; housing .door = [[Door alloc] init];
housing .window = [[Window alloc] init ];
[housing InAndOut];
[housing takeAbreath];
housing.door.replace = @"红色";
[housing.door color];
}
return ;
}

Objective-C复合的更多相关文章

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)

    本文出处:http://www.cnblogs.com/wy123/p/6008477.html 关于统计信息对数据行数做预估,之前写过对非相关列(单独或者单独的索引列)进行预估时候的算法,参考这里. ...

  3. 1 background(复合属性)与font(复合属性) 2 行内块的间距问题 3 行内元素的margin 4 清除浮动 5定位的元素的层级 6 Border-radius: 边框半径

    1 background(复合属性)与font(复合属性): background: 颜色  图片的链接  是否平铺  背景位置 是否滚动.(可以随意调动或省略) Font: 粗度 字体风格 字体大小 ...

  4. 《Entity Framework 6 Recipes》中文翻译系列 (35) ------ 第六章 继承与建模高级应用之TPH继承映射中使用复合条件

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-11  TPH继承映射中使用复合条件 问题 你想使用TPH为一张表建模,建模中使 ...

  5. MySQL复合分区

    到底还是开源软件,MySQL对复合分区的支持远远没有Oracle丰富. 在MySQL 5.6版本中,只支持RANGE和LIST的子分区,且子分区的类型只能为HASH和KEY. 譬如: CREATE T ...

  6. Hibernate 表映射 主键生成策略与复合主键

    主要分析三点: 一.数据表和Java类的映射 : 二.单一主键映射和主键的生成策略 : 三.复合主键的表映射 : 一.数据表和Java类的映射  Hibernate封装了数据库DDL语句,只需要将数据 ...

  7. OC 类簇与复合

    OC 类簇与复合 类簇: 类簇是Foundation框架中广泛使用的设计模式.类簇将一些私有的.具体的子类组合在一个公共的.抽象的超类下面,以这种方法来组织类可以简化一个面向对象框架的公开架构,而又不 ...

  8. Objective C中的ARC的修饰符的使用---- 学习笔记九

    #import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...

  9. Objective的字符串拼接 似乎没有Swift方便,但也可以制做一些较为方便的写法

    NSString *str1 = @"字符串1"; NSString *str2 = @"字符串2"; //在同样条件下,Objective的字符串拼接 往往只 ...

  10. Mysql复合索引

    当Mysql使用索引字段作为条件时,如果该索引是复合索引,必须使用该索引中的第一个字段作为条件才能保证系统使用该索引,否则该索引不会被使用,并且应尽可能地让索引顺序和字段顺序一致

随机推荐

  1. python表达式操作符【学习python必知必会】

    运算符 描述 实例 yield x 生成器函数发送协议   lambda args: expression 生成匿名函数   x if y else z 三元选择表达式(c系列有的 python也要有 ...

  2. my-Life项目开发流程

    一:新建java web项目  (懂得使用gradle哦!) 1.http://www.cnblogs.com/xylle/p/5234380.html 2.新建项目后,然后新建module, 如果甲 ...

  3. Android新旧版本Notification

    Android新旧版本Notification 在notification.setLatestEventInfo() 过时了 以前: NotificationManager mn = (Notific ...

  4. JS实时定位

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  5. 【POJ 2482】Stars in Your Window

    http://poj.org/problem?id=2482 线段树扫描线 #include<cstdio> #include<cstring> #include<alg ...

  6. mysql之旅【第一篇】

    1,基本操作 create databades 数据库名: #创建数据库 show databases; #显示存在的数据库 drop database 数据库名字 #删除数据库 2,数据库存储引擎介 ...

  7. 概率 light oj 1104

    t个数据 n天一年  至少2个人在同一天生日的概率>=0.5 问至少多少人 显然要从反面考虑 设365天 都在不同一天的概率 p(num)=1*364/365*363/365...; =(day ...

  8. 怎么解决mysql不允许远程连接的错误

    最近使用Navicat for MySQl访问远程mysql数据库,出现报错,显示"1130 - Host'xxx.xxx.xxx.xxx' is not allowed to connec ...

  9. SSM三大框架(转发)

    转自:SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis) 使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基 ...

  10. java中会存在内存泄漏吗,请简单描述。

    内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中.Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以 ...