协议是否可以私有继承,以便在下一个继承级别中不应该访问它?
答案 0 :(得分: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
并且任何人都可以通过首先投射对象向NSCoding
发送MyObject
消息:
[(id<NSCoding>)someObject encodeWithCoder:someCoder]
如果你创建了MyObject
的子类,并且你的子类也声明它符合NSCoding
,那么它几乎肯定需要从它自己的{{1}调用[super encodeWithCoder:]
方法。
答案 1 :(得分:0)
不,由于语言设计,这是不可能的。
此外,由于任何方法都可以覆盖,因此如果来自正确的类,您无法确定您的被调用方法。
可能有一些黑客允许直接调用你想要的方法,但这并不容易,甚至可能无法实现。
答案 2 :(得分:0)
协议或其他方式,无法阻止子类重写的方法