重複の可能性:
Objective C での抽象クラスの作成
Objective-C プロジェクトで抽象クラスを作成したいと考えています。
しかし、「抽象」(Java の場合)、「仮想」(C++ の場合) などのアイデアは見つかりません。
Objective-C には抽象的なアイデアがありませんか? ありがとうございました。
重複の可能性:
Objective C での抽象クラスの作成
Objective-C プロジェクトで抽象クラスを作成したいと考えています。
しかし、「抽象」(Java の場合)、「仮想」(C++ の場合) などのアイデアは見つかりません。
Objective-C には抽象的なアイデアがありませんか? ありがとうございました。
抽象クラスはありませんが、クラスとプロトコル(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
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.