可以私有继承协议,以便在下一个继承级别不应该访问它吗?
问问题
1293 次
3 回答
4
Objective-C 没有 C++ 那样的“私有继承”(或“私有一致性”)。
您可以遵守协议,而无需在头文件中声明您的一致性。例如,如果您将其放在文件中的声明NSCoding
上方,您可以遵守“秘密” :@implementation
.m
@interface MyObject () <NSCoding>
@end
这声明了一个将协议添加到类的类扩展。NSCoding
MyObject
但是,任何人(包括子类)都可以询问您是否采用该协议:
[[MyObject class] conformsToProtocol:@protocol(NSCoding)]
// returns YES
[[MySubObject class] conformsToProtocol:@protocol(NSCoding)]
// also returns YES, if MySubObject is a subclass of MyObject
并且任何人都可以通过先转换对象来向 a发送NSCoding
消息:MyObject
[(id<NSCoding>)someObject encodeWithCoder:someCoder]
如果您创建了 的子类MyObject
,并且您的子类也声明它符合NSCoding
,那么它几乎肯定需要[super encodeWithCoder:]
从自己的encodeWithCoder:
方法中调用。
于 2012-08-08T07:21:18.007 回答
0
不,由于语言设计,这是不可能的。
此外,由于任何方法都可以被覆盖,因此您永远无法确定您调用的方法是否来自正确的类。
可能有一些 hack 允许直接调用您想要的方法,但这并不容易,甚至可能是不可能的。
于 2012-08-08T07:16:12.440 回答
0
协议或其他方式,没有办法阻止方法被子类覆盖
于 2012-08-08T07:20:36.080 回答