【发布时间】:2014-09-16 17:35:15
【问题描述】:
我在 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 你是指年龄吗?有人能告诉我哪里出错了吗?谢谢。
【问题讨论】:
-
子类应该避免初始化继承的实例变量。这应该留给超类初始化代码,这就是为什么你的初始化方法应该总是调用
[super init...]。
标签: ios objective-c oop inheritance parent-child