Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 我可以用我的子类实例化我的超类吗?_Objective C_Subclass_Superclass_Objectinstantiation - Fatal编程技术网

Objective c 我可以用我的子类实例化我的超类吗?

Objective c 我可以用我的子类实例化我的超类吗?,objective-c,subclass,superclass,objectinstantiation,Objective C,Subclass,Superclass,Objectinstantiation,deck是我的超类,playingCardDeck是我的deck子类。 我发现我可以用我的子类来实例化我的超类,这让我很困惑。 你能告诉我这方面的情况吗?将使用哪个init方法以及与此相关的任何其他功能。提前谢谢 #import "XYZViewController.h" #import "PlayingCardDeck.h" @interface XYZViewController () @property (weak, nonatomic) IBOutlet UILabel *flipLab

deck
是我的超类,
playingCardDeck
是我的deck子类。 我发现我可以用我的子类来实例化我的超类,这让我很困惑。 你能告诉我这方面的情况吗?将使用哪个
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];
}

这一点也不奇怪。这是非常正常的OOP(正式名称为)。
Animal
类型的对象可以接受
Dog
类型的对象。但是你只能在上面调用
Animal
方法


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

提供的,那么子类持有的实例变量呢?
deck
可以访问它们吗?非常感谢。顺便问一下,你能给我推荐一本关于oc的书,里面详细介绍了这类事情(类、子类、继承)。我是oc的新手(甚至是OOP语言的新手)。非常感谢。非常感谢:)这不是真正的Objective-C;这就是面向对象编程(OOP)。实例将具有其所有属性。但是,任何具有
类型变量的调用方都将无法访问不属于
的任何内容。关于OOP有很多很好的介绍(大多数想法在OOP语言中是等效的)。(或者只需搜索“oop简介”)