Objective-C复合
正所谓复合,便是定义的这个类中的成员是另外类的实例方法。
也就是把其他对象作为自身的题部分,以提升自身的功能,
就相当于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复合的更多相关文章
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)
本文出处:http://www.cnblogs.com/wy123/p/6008477.html 关于统计信息对数据行数做预估,之前写过对非相关列(单独或者单独的索引列)进行预估时候的算法,参考这里. ...
- 1 background(复合属性)与font(复合属性) 2 行内块的间距问题 3 行内元素的margin 4 清除浮动 5定位的元素的层级 6 Border-radius: 边框半径
1 background(复合属性)与font(复合属性): background: 颜色 图片的链接 是否平铺 背景位置 是否滚动.(可以随意调动或省略) Font: 粗度 字体风格 字体大小 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (35) ------ 第六章 继承与建模高级应用之TPH继承映射中使用复合条件
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-11 TPH继承映射中使用复合条件 问题 你想使用TPH为一张表建模,建模中使 ...
- MySQL复合分区
到底还是开源软件,MySQL对复合分区的支持远远没有Oracle丰富. 在MySQL 5.6版本中,只支持RANGE和LIST的子分区,且子分区的类型只能为HASH和KEY. 譬如: CREATE T ...
- Hibernate 表映射 主键生成策略与复合主键
主要分析三点: 一.数据表和Java类的映射 : 二.单一主键映射和主键的生成策略 : 三.复合主键的表映射 : 一.数据表和Java类的映射 Hibernate封装了数据库DDL语句,只需要将数据 ...
- OC 类簇与复合
OC 类簇与复合 类簇: 类簇是Foundation框架中广泛使用的设计模式.类簇将一些私有的.具体的子类组合在一个公共的.抽象的超类下面,以这种方法来组织类可以简化一个面向对象框架的公开架构,而又不 ...
- Objective C中的ARC的修饰符的使用---- 学习笔记九
#import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...
- Objective的字符串拼接 似乎没有Swift方便,但也可以制做一些较为方便的写法
NSString *str1 = @"字符串1"; NSString *str2 = @"字符串2"; //在同样条件下,Objective的字符串拼接 往往只 ...
- Mysql复合索引
当Mysql使用索引字段作为条件时,如果该索引是复合索引,必须使用该索引中的第一个字段作为条件才能保证系统使用该索引,否则该索引不会被使用,并且应尽可能地让索引顺序和字段顺序一致
随机推荐
- [CF#250 Div.2 D]The Child and Zoo(并查集)
题目:http://codeforces.com/problemset/problem/437/D 题意:有n个点,m条边的无向图,保证所有点都能互通,n,m<=10^5 每个点都有权值,每条边 ...
- floyd原理以及求最小环
floyd这个东西学会了好久了,但是原理总是忘记,或者说没有真正的明白,这里在说一下. 我们要求的是任意的 i,j 之间的最短路径,用动态规划的思想来解决就是f[i,j,k]表示i到j中间节点不超过k ...
- Position、Float
http://www.cnblogs.com/coffeedeveloper/p/3145790.html
- zabbix3.0安装教程
一.Zabbix介绍 zabbix 简介 Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费 ...
- [转]SpringMVC+Hibernate+Spring 简单的一个整合实例
原文地址:http://langgufu.iteye.com/blog/2088355 下面开始实例,这个实例的需求是对用户信息进行增删改查.首先创建一个web项目test_ssh,目录结构及需要的J ...
- Linux_虚拟机_安装VMware Tools
以root用户执行,否则可能会出现权限不足,无法执行的情况 一.点击安装Vmware Tools 二.拖动安装文件到桌面并解压 三.双击并[在终端中运行] 四.根据提示回车或输入yes ...
- PyQt类库介绍
安装完PyQt后我们去看看这个库里面有些什么cd /usr/lib/python3/dist-packages/PyQt5/ && ls都是些.so的动态链接库,这就是为什么我们在安 ...
- Android Studio-目录结构
新建工程项目后AS的Product目录结构如下所示: .idea://AS生成的工程配置文件,类似Eclipse的project.properties. app://AS创建工程中的一个Module. ...
- java -日期
package com.qinghuainvest.tsmarket.util; import java.text.ParseException; import java.text.SimpleDat ...
- Java算法-冒泡排序
冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字 ...