2012-08-08 69 views

回答

4

被覆盖Objective-C的没有“私有继承”(或“私人一致性”)C++那样的方式。

您可以遵守协议,而不必在头文件中宣传您的一致性。

@interface MyObject() <NSCoding> 
@end 

声明一个类扩展,增加了NSCoding议定书MyObject类:例如,你可以,如果你把这个上面你@implementation语句进行.m文件符合NSCoding“秘密”。

然而,任何人(包括子类),可以问你是否采用协议:

[[MyObject class] conformsToProtocol:@protocol(NSCoding)] 
// returns YES 

[[MySubObject class] conformsToProtocol:@protocol(NSCoding)] 
// also returns YES, if MySubObject is a subclass of MyObject 

,任何人都可以发送NSCoding消息到MyObject由第一投射对象:

[(id<NSCoding>)someObject encodeWithCoder:someCoder] 

如果您创建了MyObject的子类,并且您的子类也声明它符合NSCoding,那么几乎可以肯定需要从其自己的encodeWithCoder:中调用[super encodeWithCoder:] HOD。

+0

我想(meta-)的问题是“你为什么要这么做?” – nielsbot 2012-08-08 07:37:17

+0

@nielsbot我会说这个元问题。 :) – 2012-08-08 07:38:00

+0

通过私下继承“我的意思是,如果我继承了一个协议”ProtocolBase“,以便它的回调应该是同一个对象(类A),但是当我们继承这个类到另一个类时,假设B然后b不应该得到协议功能超载 – vinsi 2012-08-08 07:52:40

0

不,这是不可能的,因为语言设计。

此外,因为任何方法都可以被覆盖,所以如果来自正确的类别,则无法确定被调用的方法。

可能有一些黑客可以直接使用调用您想要的方法,但这并不容易,甚至可能无法实现。

0

协议或以其它方式,也没有办法阻止方法由子类

[Source]