他的任务说:所有方法(包括属性)都由子类继承,无论它们是公共的还是私有的。如果在子类中实现方法,则无论方法是公共方法还是私有方法,您都将覆盖超类的实现(如果有的话)。
为什么私有属性和方法(在实现文件中)也可以由子类继承。
我记得私有属性和方法在子类中是不可见的,而子类不能使用超类的私有属性和方法。
答案 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
。