2

次の継承レベルでこれにアクセスしないように、プロトコルをプライベートに継承できますか?

4

3 に答える 3

4

Objective-Cには、C ++のような「プライベート継承」(または「プライベート適合」)はありません。

ヘッダーファイルで適合性を宣伝することなく、プロトコルに適合させることができます。たとえば、ファイルのステートメントのNSCoding上にこれを置くと、「密かに」準拠できます。@implementation.m

@interface MyObject () <NSCoding>
@end

これは、プロトコルをクラスに追加するクラス拡張を宣言します。NSCodingMyObject

ただし、誰でも(サブクラスを含む)、プロトコルを採用するかどうかを尋ねることができます。

[[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は、ほぼ確実に[super encodeWithCoder:]独自のencodeWithCoder:メソッドから呼び出す必要があります。

于 2012-08-08T07:21:18.007 に答える
0

いいえ、言語設計のため不可能です。

さらに、どのメソッドもオーバーライドできるため、呼び出されたメソッドが正しいクラスからのものであるかどうかを確認することはできません。

必要なメソッドを直接呼び出すことを許可するハックがあるかもしれませんが、それはそれほど簡単ではなく、不可能でさえあるかもしれません。

于 2012-08-08T07:16:12.440 に答える
0

プロトコルであろうとなかろうと、メソッドがサブクラスによってオーバーライドされるのを止める方法はありません

[ソース]

于 2012-08-08T07:20:36.080 に答える