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

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

就相当于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. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  2. oracle递归查询树的SQL语句

    来自互联网 SELECT * FROM a_ParkingLot AWHERE A.REGIONID IN(    SELECT r.ID FROM a_region r    START WITH ...

  3. 一个Activity掌握Design新控件 (转)

    原文地址:http://blog.csdn.net/lavor_zl/article/details/51295364 谷歌在推出Android5.0的同时推出了全新的设计Material Desig ...

  4. Entity Framework Code First (四)Fluent API - 配置属性/类型

    上篇博文说过当我们定义的类不能遵循约定(Conventions)的时候,Code First 提供了两种方式来配置你的类:DataAnnotations 和 Fluent API, 本文将关注 Flu ...

  5. Android Studio开发调试使用

    Android Studio调试其实也非常方便,一般问题直接通过AS的DDMS的Logcat就可以搞定.AS支持类似Eclipse的DDMS的所有功能.这里要说的是疑难问题的调试方式,即断点调试. 首 ...

  6. Android中图像变换Matrix的原理、代码验证和应用(一)

    第一部分 Matrix的数学原理 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类.Android中的Matrix是一个3 x 3的矩阵,其内容如下: Matri ...

  7. bzoj4418&&bzoj4419&&bzoj4420:SHOI2013Day2题解

    这三题截止现在(2016.3.11)窝居然都是跑的最快的……可啪…… T1 bzoj4418 这题叫做扇形面积并,看到这个名字我就方了,因为我不会计算几何啊QAQ 一看题目,发现是傻逼题……(雾) 又 ...

  8. asp.net mvc 外网获取不到port问题解决

    var IPandPort = Request.ServerVariables["HTTP_HOST"];

  9. 69.Android之天气预报app

    最近买了本书<Android第一行代码>,通篇看了下感觉不错,书本最后有个实战项目酷欧天气,闲来无事就照着敲了一遍代码,主要在请求天气接口和背景优化做了些小改动,现在来记录下. (1) a ...

  10. MAHOUT_LOCAL is not set; adding HADOOP_CONF_DIR to classpath.

    [hxsyl@CentOSMaster hadoop-2.6.4]$ mahout MAHOUT_LOCAL is not set; adding HADOOP_CONF_DIR to classpa ...