我可以通过使用我的子类来实例化我的超类吗?

时间:2014-08-01 16:04:56

标签: objective-c subclass superclass objectinstantiation

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];
}

1 个答案:

答案 0 :(得分:1)

这根本不应该令人惊讶。这是非常正常的OOP(它正式称为Liskov substitution principle)。类型为Animal的对象可以接受Dog类型的对象。但是你只能在其上调用Animal方法。

在您的示例中,init的{​​{1}}将被执行。访问PlayingCardDeck的任何人都只能调用deck上定义的方法,但实施方式将是Deck提供的方法。