在斯坦福iOS7教程中,为什么私有属性和方法(在实现文件中)也可以由子类继承

时间:2014-01-11 01:46:42

标签: objective-c inheritance ios7

他的任务说:所有方法(包括属性)都由子类继承,无论它们是公共的还是私有的。如果在子类中实现方法,则无论方法是公共方法还是私有方法,您都将覆盖超类的实现(如果有的话)。

为什么私有属性和方法(在实现文件中)也可以由子类继承。

我记得私有属性和方法在子类中是不可见的,而子类不能使用超类的私有属性和方法。

2 个答案:

答案 0 :(得分:0)

  

为什么私有属性和方法(在实现文件中)也可以由子类继承

因为给定类的每个实例也是该类的超类的实例。例如,每个UIView也是UIResponder和NSObject。如果子类只继承了它的一些超类的方法和属性,那么该类的实例将不是完整的超类的有效实例。

答案 1 :(得分:0)

为了给你一个更长的答案,包括你对Calebs回答的评论:

你误解了教程的作者想说的内容。 (我认为这不一定是你的错。)

我们举个例子:

有一个基类具有公共和私有方法。

@interface BaseClass : …
- (void)publicMethod;
@end

@implementation BaseClass
- (void)_privateMethod
{
    …
}

- (void)publicMethod
{
    …
    [self _privateMethod];
    …
}
@end

让我们有一个子类

@interface Subclass : BaseClass
- (void)doSomething;
@end

@implementation Subclass
- (void)doSomething
{
    …
    [self publicMethod];
    …
}
@end

您知道,-publicMethod继承自BaseClass。因此,您可以向self发送相应的消息。但是-publicMethod也会向self发送消息。请记住:self中的-publicMethod仍然指向Subclass的实例,即使它的源代码位于BaseClass。因此[self _privateMethod]Subclass的实例的上下文中执行。有人可能会问,如果可能的话,因为Subclass-_privateMethod一无所知。是的。

但在Subclass中,您无法使用_privateMethod