gpt4 book ai didi

Objective-C 使用继承变量和覆盖继承属性

转载 作者:太空狗 更新时间:2023-10-30 03:48:01 26 4
gpt4 key购买 nike

(启用 ARC)

假设我有一个名为 BasicGameCard 的类,其中声明了以下属性:

@property (nonatomic) NSUInteger cardValue; 

然后我创建一个派生类 WarGameCard :BasicGameCard。

WarGameCard 扩展了 suit 属性并希望使用继承的 cardValue 来表示其排名问题:

  1. 如何在 WarGameCard 类中使用/调用变量 _cardValue 而不使用该属性?

    a) 在 WarGameCard 中写入 _cardValue:导致编译器错误(我想没有 protected objective-c 中的访问修饰符并且变量是私有(private)的)

    b) 不能使用 self.cardValue 它将编译但会导致无限循环调用 二传手

    c) 尝试在 WarGameCard 中写入以下内容:@synthesize cardValue = _cardValue; 但是在调试时我看到 2 个不同的变量,其中一个是父类(super class),另一个是派生的 每个都有不同的值(value)

  2. 什么是覆盖继承属性的正确方法

最佳答案

在您的子类中,使用继承访问器 cardValuesetCardValue: 来获取和设置继承值。您不需要覆盖该值;你只需要使用它。

一旦您的子类始终使用访问器,您就可以根据需要覆盖访问器。例如

 - (void) setCardValue: (NSInteger) newValue
{
[super setValue: newValue];
[self celebratePromotion];
}

你是对的:在 Objective C 中没有 protected 继承。但是现代 Objective-C 比 C++ 更广泛地使用访问器。事实上,在构造函数和析构函数以及(有争议的)访问器之外,您永远不应该直接接触实例变量。

关于Objective-C 使用继承变量和覆盖继承属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15058267/

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