1

重複の可能性:
Objective C での抽象クラスの作成

Objective-C プロジェクトで抽象クラスを作成したいと考えています。

しかし、「抽象」(Java の場合)、「仮想」(C++ の場合) などのアイデアは見つかりません。

Objective-C には抽象的なアイデアがありませんか? ありがとうございました。

4

2 に答える 2

12

抽象クラスはありませんが、クラスプロトコル(Java のインターフェースに似ています) の組み合わせを使用して同様のものを作成できます。まず、抽象クラスを、デフォルトの実装を提供するメソッドと、サブクラスで実装する必要があるメソッドに分割します。ここで、デフォルトのメソッドを で宣言して@interfaceで実装し@implementation、必要なメソッドを で宣言し@protocolます。class<protocol>最後に、プロトコルを実装するクラスからサブクラスを派生させます。例えば:

@interface MyAbstract

- (void) methodWithDefaultImplementation;

@end

@protocol MyAbstract

- (void) methodSubclassMustImplement;

@end

@implementation MyAbstract

- (void) methodWithDefaultImplementation { ... }

@end

@interface MyConcreteClass: MyAbstract<MyAbstract>
   ...
@end

@implementation MyConcreteClass

// must implement abstract methods in protocol
- (void) methodSubclassMustImplement { ... }

@end

クラスとプロトコルに同じ名前を使用することに懸念がある場合は、次のNSObjectパターンに従う Cocoa を参照してください...

HTH

于 2012-12-10T08:30:35.943 に答える
8

Formally, no. Abstract classes are implemented by stubbing out methods in the base class and then documenting that a subclass must implement those methods. The onus is on the author to write classes that match the class contract rather than on the compiler to check for missing methods.

Objective-C has protocols, which are like Java interfaces. If you're looking for the equivalent to a pure virtual C++ class or an interface in Java, this is what you want.

于 2012-12-10T01:43:54.907 に答える