所以在Objective-C中,我有一个PlayingCardDeck类(其中包含一个PlayingCards数组,它是Cards的子类),它有一个drawRandom方法(继承自Deck类),该方法从该数组中返回一个随机的Card对象
我将此drawRandom方法的结果分配给Card * hello,因为返回了一个卡片对象,因此我无法将结果分配给PlayingCard *你好。
如果我想要访问我在PlayingCards中实现的一些方法,我该怎么做?我被迫分配给卡,因此我无法访问任何PlayCard方法。
我应该在PlayingCardDeck中重新实现drawRandom方法,以便它返回一个PlayingCard吗?
或者还有其他方法吗? (因为重新实现我的所有超类方法似乎是浪费......如果我这样做,那么子类的重点是什么?)
我只是遗漏了什么?
答案 0 :(得分:0)
它看起来像是对象模型中的一个缺陷,所以也许你应该返回PlayingCards
,但如果你需要这样做,安全的方法是检查对象的Class,然后再转换它并使方法调用。
if ([card isKindOfClass: [PlayingCard class]]) {
[(PlayingCard*)card doMyPlayingCardMethod];
}
这可以安全地检查card
对象是PlayingCard
还是衍生物,然后在其上调用-doMyPlayingCardMethod
方法。
至于“子类化的重点是什么?”问题,对于另一个案例来说真的更多。因此,例如,如果FacePlayingCard
和NumberPlayingCard
都是PlayingCard
的子类,那么您可以使用-drawCard
方法知道如何以不同方式绘制面部卡。数字卡。
在这种情况下,您从Card
抽象PlayingCard
,但似乎没有任何关于Card
的内容,所以这是一个毫无意义的地方把子类。
另一方面,如果你有CollectingCard
,它也是Card
的子类,你也希望能够将它们改组,那会更有意义。