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

来源:互联网 发布:乾坤大挪移 知乎 编辑:程序博客网 时间:2024/05/17 23:24

对象与对象之间的关系

继承 复合

什么是复合:

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文件重新引入头文件。
0 0
原创粉丝点击