2012-06-03 113 views
0

我有點(實際上,很多)困惑,爲什麼我在下面執行下面的代碼時收到底部列出的輸出。昆蟲和哺乳動物實例應該是兩個獨立的實例變量對象。兩個對[super initAttributes]的調用都應該獨立初始化每個實例,每個實例都通過self。那麼爲什麼昆蟲哺乳動物實例在顯示時具有相同的值?看起來好像兩個實例都指向內存中的同一個對象。Objective-C子類化:兩個子類實例似乎指向相同的實例

任何幫助將非常感激。謝謝!

動物

//Interface 

#import <Foundation/Foundation.h> 

@interface Animal : NSObject 

-(id) initAttributes: (NSString *) initName Legs: (int) initLegs Arms: (int) initArms; 
-(void) display; 

@end 

//Implementation 

#import "Animal.h" 

@implementation Animal 

NSString *name; 
int legs, arms; 

-(id) initAttributes: (NSString *) initName Legs: (int) initLegs Arms: (int) initArms 
{ 
    self = [super init]; 

    if (self) 
    { 
     name = initName; 
     legs = initLegs; 
     arms = initArms; 
    } 

    return self; 
} 

-(void) display 
{ 
    NSLog(@"Name: %@ Legs: %i Arms: %i", name, legs, arms); 
} 

@end 

昆蟲類

//Interface 

#import "Animal.h" 

@interface Insect : Animal 

-(id) initInsect: (NSString *) initName; 

@end 

//Implementation 

#import "Insect.h" 

@implementation Insect 

-(id) initInsect: (NSString *) initName 
{ 
    self = [super initAttributes: initName Legs: 8 Arms: 0]; 

    if (self) 
    { 
    } 

    return self; 
} 

@end 

哺乳動物類

//Interface 

#import "Animal.h" 

@interface Mammal : Animal 

-(id) initMammal: (NSString *) initName; 

@end 

//Implementation 


#import "Mammal.h" 

@implementation Mammal 

-(id) initMammal: (NSString *) initName 
{ 
    self = [super initAttributes: initName Legs: 2 Arms: 2]; 

    if (self) 
    { 
    } 

    return self; 
} 

@end 

主要

#import <Foundation/Foundation.h> 
#import "Insect.h" 
#import "Mammal.h" 

int main (int argc, const char * argv[]) 
{ 

    @autoreleasepool { 

     Insect *insect = [[Insect alloc] initInsect: @"Spydor"]; 
     Mammal *mammal = [[Mammal alloc] initMammal: @"Platypus"]; 

     [insect display]; 
     [mammal display]; 
    } 

    return 0; 
} 

輸出

名稱:鴨嘴獸腿:2種武器:2
名稱:鴨嘴獸腿:2種武器:2

+0

昆蟲有6條腿嗎? – ThomasW

+0

這是我的班級,他們有8條腿。 :-) – user1433587

回答

1

我會認爲這是家庭作業,所以這裏是一個提示: 錯誤與您的變量聲明。不要爲全局變量使用全局變量。

+0

對於學習語言的人來說,這可能是一個非常微妙的問題。 – ThomasW

+0

@ user1433587 [Start here](https://developer.apple.com/library/mac/documentation/cocoa/conceptual/objectivec/Chapters/ocDefiningClasses.html#//apple_ref/doc/uid/TP30001163-CH12-SW1) 。具體來說,請閱讀_Class implementation_部分,並且不要錯過_Class Interface_部分中的註釋。 – albertamg

+0

感謝您的回覆!我正在理解的風口浪尖上。不是作業;只是試圖學習Objective-C。我將在Apple Developer網站上查看更多的信息。 – user1433587