Objective-C继承,需要澄清

时间:2011-12-08 04:13:22

标签: objective-c inheritance

我有

@interface PlayerDeck : Deck
@interface MasterDeck : Deck

PlayerDeckMasterDeck都有

@property (nonatomic, strong) NSMutableArray *cards;   // All cards in this Deck

Inside Deck'我想

-(NSString*) descriptionOfDeck: (Deck *) deck

PlayerDeckMasterDeck内,我想

-(NSString*) description{
    [super descriptionOfDeck:self];
}

Inside Deck我会在每个甲板上迭代卡片:

-(NSString*) descriptionOfDeck: (Deck *) deck {

    NSString *deckDescription = [[NSString alloc] init];

    for (Card *c in [deck cards]) {
        deckDescription = [deckDescription 
                 stringByAppendingString:[c description]];
    }

    return deckDescription;
}

问题:[卡片卡]无法解决。

请帮助我理解。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您说cards属性仅在MasterDeckPlayerDeck类上定义,不在<{em>上{{1 }}

如果这是正确的,请在尝试向Deck发送deck消息时考虑cards的类型:它是Deck类型,不定义cards 。您需要将其强制转换为 定义cards的类型,或直接在基类中定义cards。后者似乎更明智,既可以解决这个问题,又因为所有Deck都有卡片似乎是合适的!

更新:您案例中的投射示例如下:

for (Card *c in [((MasterDeck *) deck) cards])

但你可以看到问题,不是吗?它要求基类以某种方式知道它的子类,这种类会破坏继承的目的。

正如我 - 和@rgeorge在评论中所建议的那样,在基类中声明cards属性是更好的举措。