【问题标题】:Can i instantiation my superclass by using my subclass?我可以通过使用我的子类来实例化我的超类吗?
【发布时间】:2014-09-24 21:32:23
【问题描述】:

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

【问题讨论】:

    标签: objective-c subclass superclass objectinstantiation


    【解决方案1】:

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

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

    【讨论】:

    • 子类持有的实例变量呢? deck 可以访问它们吗?非常感谢。顺便说一句,你能推荐我一本关于 oc 的书,它详细讨论了这类事情(类子类,继承)。我是 oc 的新手(甚至是 OOP 语言的新手)。谢谢很多。真的谢谢:)
    • 这不是真正的Objective-C;这只是面向对象编程(OOP)。该实例将具有其所有属性。但是任何拥有Deck 类型变量的调用者将无法访问不属于Deck 的任何内容。对 OOP 有很多很好的介绍(大多数想法在 OOP 语言中都是等效的)。 codeproject.com/Articles/22769/…docs.oracle.com/javase/tutorial/java/concepts(或者直接搜索“oop 简介”)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    相关资源
    最近更新 更多