0

我正在为 Person 和 PersonChild 类做一个例子。我想知道为什么我可以从 Person 类中得到这个 Int 。

//主要的

#import <Foundation/Foundation.h>
#import "Person.h"
#import "PersonChild.h"

int main(int argc, const char * argv[]){
    @autoreleasepool {
        PersonChild *Ben = [[PersonChild alloc]init];
        Ben.age = 25;  <-- Property 'age' not found on object of type 'PersonChild *'
        [Ben printThing];
    }
    return 0;
}

//人物类

#import "Person.h"

@implementation Person
@synthesize age, weight;

@end

//人.h

#import <Foundation/Foundation.h>

@interface Person : NSObject{
    int age;
}
@property int age, weight;
@end

//PersonChild 类

#import "PersonChild.h"

@implementation PersonChild

-(void) printThing{
   NSLog(@"%i", age);
}
@end

//PersonChild.h

#import <Foundation/Foundation.h>
#import "Person.h"

@class Person;
@interface PersonChild : NSObject

-(void) printThing;

@end
4

2 回答 2

3

PersonChild 不是从 Person 继承的。PersonChild.h 的正确语法是:

#import "Person.h"
@interface PersonChild : Person
于 2013-02-23T20:30:37.377 回答
0

除非您错误地列出了标题,否则“age”是 person.h 的一个属性,而“Ben”是 personChild.h 的一个实例

类的任何实例使用的实例变量 (iVar) 必须在该类(或超类)中声明为实例变量。

我认为您混淆了继承和导入。您在上面所做的是将 Person.h 导入 PersonChild.h 并假设这将导致所有“Person”类 iVar 在“PersonChild”类中可用。

理解差异的一种方法是将 PersonChild.h 更改为以下内容。请注意如何在@interface 行添加 Person 是说 PersonChild 类继承自 Person 类的正确方法。这应该可以解决您的错误。

#import <Foundation/Foundation.h>
#import Person.h    

@interface PersonChild : Person

-(void) printThing;
@end

希望这可以帮助

于 2013-02-23T20:18:25.837 回答