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文件重新引入頭文件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章