0

deck是我的超类,playingCardDeck也是我的甲板子类。我发现我可以通过使用我的子类来实例化我的超类,这让我很困惑。你能告诉我这个吗?init将使用哪种方法以及关于这个的任何其他功能。提前谢谢。

#import "XYZViewController.h"
#import "PlayingCardDeck.h"
@interface XYZViewController ()
@property (weak, nonatomic) IBOutlet UILabel *flipLabel;
@property (nonatomic) NSUInteger flipCount;
@property (nonatomic) Deck *deck;
@end

@implementation XYZViewController
- (Deck *)deck
{
    if (!_deck) {
        _deck=[self createDeck];
    }
    return _deck;
}
- (Deck *)createDeck
{
    return [[PlayingCardDeck alloc]init];
}
4

1 回答 1

1

这一点都不奇怪。这是很正常的 OOP(它的正式名称是Liskov 替换原则)。type 的对象Animal可以接受 type 的对象Dog。但是你只能Animal在上面调用方法。

在您的示例中,将执行initfor 。PlayingCardDeck任何访问的人deck都只能调用在 上定义的方法Deck,但实现将是由PlayingCardDeck.

于 2014-08-01T16:16:23.243 回答