(ARC已启用)
假设我在其中有一个类名BasicGameCard,它声明了以下属性:
@property (nonatomic) NSUInteger cardValue;
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个派生类WarGameCard:BasicGameCard.
WarGameCard扩展了套装属性,并希望使用继承的cardValue来表示其排名问题:
如何在不使用属性的情况下在WarGameCard类中使用/调用变量_cardValue?
一)写_cardValue的WarGameCard:导致编译器错误(我想有在Objective-C没有受保护的访问修饰符和变量是私有的)
b)不能使用self.cardValue它会编译但会导致无限循环调用setter
c)尝试编写以下代码WarGameCard:@synthesize cardValue = _cardValue;
但是在调试时我看到2个不同的变量,一个是超类,另一个是派生的,每个都有不同的值
覆盖继承属性的正确方法是什么
Mar*_*ein 13
在子类中,使用继承的访问器cardValue并setCardValue:获取和设置继承的值.您不需要覆盖该值; 你只需要使用它.
一旦您的子类一直使用访问器,那么您可以根据需要覆盖访问器.例如
- (void) setCardValue: (NSInteger) newValue
{
[super setValue: newValue];
[self celebratePromotion];
}
Run Code Online (Sandbox Code Playgroud)
你是对的:在Objective C中没有受保护的继承.但是现代Objective-C比C++更广泛地使用访问器.事实上,在外部构造函数和析构函数以及(可以说是)访问器之外,您不应该直接触及实例变量.
| 归档时间: |
|
| 查看次数: |
8278 次 |
| 最近记录: |