协议(protocol)是否可以私有(private)继承,以便在下一个继承级别中不应访问该协议(protocol)?
最佳答案
Objective-C 没有像 C++ 那样的“私有(private)继承”(或“私有(private)一致性”)。
您可以遵守协议(protocol),而无需在头文件中声明您的一致性。例如,如果您将其放在 .m
文件中的 @implementation
语句之上,则可以“ secret 地”遵守 NSCoding
:
@interface MyObject () <NSCoding>
@end
它声明了一个类扩展,它将NSCoding
协议(protocol)添加到MyObject
类中。
但是,任何人(包括子类)都可以询问您是否采用该协议(protocol):
[[MyObject class] conformsToProtocol:@protocol(NSCoding)]
// returns YES
[[MySubObject class] conformsToProtocol:@protocol(NSCoding)]
// also returns YES, if MySubObject is a subclass of MyObject
任何人都可以通过先转换对象来向 MyObject
发送 NSCoding
消息:
[(id<NSCoding>)someObject encodeWithCoder:someCoder]
如果你创建了MyObject
的子类,并且你的子类也声明它符合NSCoding
,那么它几乎肯定需要调用[superencodeWithCoder :]
来自它自己的 encodeWithCoder:
方法。
关于objective-c - Objective C 是否支持协议(protocol)的私有(private)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11859398/