如何将子类方法分配给超类类型变量时如何访问它?

时间:2013-06-19 23:09:39

标签: objective-c class inheritance subclassing

所以在Objective-C中,我有一个PlayingCardDeck类(其中包含一个PlayingCards数组,它是Cards的子类),它有一个drawRandom方法(继承自Deck类),该方法从该数组中返回一个随机的Card对象

我将此drawRandom方法的结果分配给Card * hello,因为返回了一个卡片对象,因此我无法将结果分配给PlayingCard *你好。

如果我想要访问我在PlayingCards中实现的一些方法,我该怎么做?我被迫分配给卡,因此我无法访问任何PlayCard方法。

我应该在PlayingCardDeck中重新实现drawRandom方法,以便它返回一个PlayingCard吗?

或者还有其他方法吗? (因为重新实现我的所有超类方法似乎是浪费......如果我这样做,那么子类的重点是什么?)

我只是遗漏了什么?

1 个答案:

答案 0 :(得分:0)

它看起来像是对象模型中的一个缺陷,所以也许你应该返回PlayingCards,但如果你需要这样做,安全的方法是检查对象的Class,然后再转换它并使方法调用。

if ([card isKindOfClass: [PlayingCard class]]) {
    [(PlayingCard*)card doMyPlayingCardMethod];
}

这可以安全地检查card对象是PlayingCard还是衍生物,然后在其上调用-doMyPlayingCardMethod方法。

至于“子类化的重点是什么?”问题,对于另一个案例来说真的更多。因此,例如,如果FacePlayingCardNumberPlayingCard都是PlayingCard的子类,那么您可以使用-drawCard方法知道如何以不同方式绘制面部卡。数字卡。

在这种情况下,您从Card抽象PlayingCard,但似乎没有任何关于Card的内容,所以这是一个毫无意义的地方把子类。

另一方面,如果你有CollectingCard,它也是Card的子类,你也希望能够将它们改组,那会更有意义。

相关问题