2012-08-08 117 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]