OC学习日记08-对象与对象之间的关系( 继承、 复合 、依赖)

对象与对象之间的关系

继承 复合

什么是复合:

1个类是由其他几个类组合而成的,他们之间的关系就叫复合。

复合与继承之间的区别:

1.满足继承的关系:is a
     当A类是一个B类,A类可以从B类继承
2.满足复合的关系:has a
     A类有一个B类,A和B就复合关系

依赖

依赖:

1个对象的方法的参数是另一个对象,那么他们的关系就是依赖关系。
main.m文件:

  Person *per = [Person new];
  Phone *iPhone=[Phone new];
  [per callWithPhone:iPhone];

 Person1 *per1=[Person1 new];
        Book  *book=[Book new];

        per1.name=@"小明";
        book.name=@"<三国演义>";

        [per1 read:book];
        [book showMasterName:per1];
        NSLog(@"%@",book);   

各个类文件:

#import <Foundation/Foundation.h>
#import "Book.h"
@interface Person1 : NSObject
@property(nonatomic,strong)NSString *name;
@property(nonatomic,strong)Book *book;

-(void)read:(Book *)book;
@end
#import "Person1.h"

@implementation Person1
-(void)read:(Book *)book{
    NSLog(@"我在读书%@",book.name);
}
@end   
#import <Foundation/Foundation.h>
@class Person1;
@interface Book : NSObject
@property(nonatomic,strong) NSString *name;//书名
@property(nonatomic,strong) NSString *authorName;//作者名

-(void)showMasterName:(Person1 *)person;
@end
#import "Book.h"
#import "Person1.h"
@implementation Book
-(void)showMasterName:(Person1 *)person{
    NSLog(@"我的主人是%@",person.name);
}
-(NSString *)description{
    return@"我是一本书";
}
@end
#import <Foundation/Foundation.h>
#import "Phone.h"
@interface Person : NSObject

@property(nonatomic ,strong) NSString *name;
@property(nonatomic ,strong) Phone *phone;//价格

-(void)callWithPhone:(Phone *)phone;
@end
#import "Person.h"

@implementation Person
-(void)callWithPhone:(Phone *)phone
{
    [phone callWithNumber:@"100"];
}
@end
#import <Foundation/Foundation.h>

@interface Phone : NSObject
@property(nonatomic ,strong) NSString *name;
@property(nonatomic ,assign) NSInteger price;//价格


-(void)callWithNumber:(NSString *)number;

@end
#import "Phone.h"

@implementation Phone
-(void)callWithNumber:(NSString *)number{
    NSLog(@"正在呼叫%@",number);
}

@end
#import <Cocoa/Cocoa.h>
#import "CPU.h"
#import "Memory.h"
#import "MainBoard.h"
@interface Computer : NSObject

@property(nonatomic ,strong)CPU *cpu;
@property(nonatomic ,strong)MainBoard *mb;
@property(nonatomic ,strong)Memory *men;
-(void)playGame;
@end
#import "Computer.h"

@implementation Computer

@end
#import <Foundation/Foundation.h>

@interface Memory : NSObject
@property(nonatomic ,strong) NSString *brand;//品牌
@property(nonatomic ,strong) NSString *model;//型号

@end
#import "Memory.h"

@implementation Memory

@end
#import <Foundation/Foundation.h>

@interface MainBoard : NSObject
@property(nonatomic ,strong) NSString *brand;//品牌
@property(nonatomic ,strong) NSString *model;//型号

@end
#import "MainBoard.h"

@implementation MainBoard

@end
#import <Foundation/Foundation.h>

@interface CPU : NSObject
@property(nonatomic ,strong) NSString *brand;//品牌
@property(nonatomic ,strong) NSString *model;//型号

-(void)jisuan;
@end
#import "CPU.h"

@implementation CPU
-(void)jisuan
{
    NSLog(@"我在计算...");
}
@end

当两个类互相包含,就会出现循环引用问题,导致出错
#import和@class的区别
#import:是讲指定的文件全部拷贝
@class:不会拷贝任何内容 ,只是告诉编译器存在这么一个类可以使用

如何解决:

     其中一个类不要使用#import来引入头文件,而是使用@class来标注这是一个咧,并在.m文件重新引入头文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值