我正在学习Objective-C。在本书的练习中,我将创建一个 Person 类和一个派生自 Person 的 Employee 类。
Person.h
@interface Person : NSObject
@property (nonatomic) float heightInMeters;
@property (nonatomic) int weightInKilos;
- (float)bodyMassIndex;
@end
Person.m
@implementation Person
- (float)bodyMassIndex
{
return self.weightInKilos / (self.heightInMeters * self.heightInMeters);
}
@end
Employee.h
@interface Employee : Person
@property (nonatomic) int employeeID;
@end
Employee.m
@implementation Employee
- (float)bodyMassIndex
{
return [super bodyMassIndex] * 0.9;
}
@end
我的书说,因为 Employee 继承自 Person ,所以每个人都已经知道 Employee 有一个名为 bodyMassIndex ,所以不需要再次做广告(在Employee.h中)。无论有没有额外的声明,我都试过了,两种方式都有效。
我的问题是,你是否应该再次宣布它?哪种方式最时尚?
答案 0 :(得分:1)
通常,请避免重新声明。如果你在Apple的头文件中闲逛,你会发现他们正在做的事情。
很少有例外情况,重新声明可以让事情更清晰,但这种判断会带来经验。祝你好运!
答案 1 :(得分:0)
不要重新声明它,因为它是额外的,不必要的冗余代码。此外,如果由于某种原因你必须改变方法签名,那么你需要更改它的另一个地方,还有一个地方让你忘记改变它,所以避免这种不必要的重复是个好主意。在大多数情况下,@synthesize
不再需要它是相同的 - 不要再这样做了,因为当你改变其他东西时,你可能忘记更新不必要的额外代码。
话虽如此,克莱布里奇斯在他的回答中提出了一个很好的观点,即在极少数情况下这是有道理的,但通常你会从经验中学到这一点,如果你不确定,这可能意味着将其抛弃。我可能只会这样做,如果它是一个非常重要且与我的课程相关的方法,最初被宣布不是在直接的超类中,而是在链的更远的地方,我想确保人们知道重要。