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



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

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

我记得私有属性和方法在子类

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

给你一个更长的答案,包括你对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.

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

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

最新更新