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 のオブジェクトは、 type のAnimalオブジェクトを受け入れることができますDogAnimalただし、その上でメソッドを呼び出すことしかできません。

あなたの例では、initforPlayingCardDeckが実行されます。アクセスした人deckは で定義されたメソッドしか呼び出すことができませんDeckが、実装は によって提供されるものになりPlayingCardDeckます。

于 2014-08-01T16:16:23.243 に答える