我有點(實際上,很多)困惑,爲什麼我在下面執行下面的代碼時收到底部列出的輸出。昆蟲和哺乳動物實例應該是兩個獨立的實例變量對象。兩個對[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
昆蟲有6條腿嗎? – ThomasW
這是我的班級,他們有8條腿。 :-) – user1433587