gpt4 book ai didi

ios - 对象 C : Can't inherit public property from parent class in child class

转载 作者:行者123 更新时间:2023-12-01 18:13:27 25 4
gpt4 key购买 nike

我在 Objective-C 中练习继承,这是我的 Person 父类

// This is Person.h
@interface Person : NSObject

@property(nonatomic, strong) NSNumber *age;
@property(nonatomic, strong) NSString *race;

-(instancetype)init;
-(instancetype)initWithAge:(NSNumber*)age andRace:(NSString*)race;

@end

这就是我在学生课上要做的事情
// This is Student.h
#import "Person.h"

@interface Student : Person

@property(nonatomic, strong) NSString *classification;
@property(nonatomic, strong) NSString *major;

@end


// This is Student.m
#import "Student.h"
#import "Person.h"

@implementation Student

-(instancetype)init
{
return [self initWithClassification:@"Freshman" andMajor:@"Computer Science"
andAge:[[NSNumber alloc] initWithInt:20] andRace:@"Caucasian"];
}

-(instancetype)initWithClassification:(NSString*)classification andMajor:(NSString*)major
andAge:(NSNumber*)age andRace:(NSString*)race
{
self = [super init];

if (self)
{
_classification = classification;
_major = major;
_age = age;
_race = race;
}

return self;
}

@end

编译器不喜欢我的做法
_age = 年龄;
_race = 种族;

使用未声明的标识符 _age 你的意思是年龄吗?有人能告诉我哪里出错了吗?谢谢你。

最佳答案

当你声明这样的属性时,clang 会自动 @synthesize它为您服务(即它将创建一个 getter 和 setter),但合成的属性对子类不可见,您有不同的选择来使其工作。

可以在子类的接口(interface)中合成ivar

@synthesize age = _age;

或者您可以在父类(super class)的接口(interface)上声明 protected ivar,以便在子类上可见。
@interface Person : NSObject {
@protected NSNumber *_age;
}

或者您可以使用 self.age = ...在您的子类上,根本不使用 ivar。

关于ios - 对象 C : Can't inherit public property from parent class in child class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25875116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com