2011-02-06 12 views
0

私はクラスMasterClassを作成し、それぞれのクラスがMasterClassである別の4つのクラスを作成し、各サブクラスがオブジェクトを返す特定のメソッドを実装するようにします。非void戻り型のサブクラス化に関するObj-c noobの質問?

// implemented by subclass 
-(MyObject*)doSomething{} 

たOBVは、コンパイラエラーがスローされます:マスタークラス自体は、使用の代わりにするための正しいフォーマットはどのようなものです。..などの一般的なユーティリティメソッドを持つシェルクラスの詳細ですか?

THX

+0

そのメソッドで 'nil'を返すだけです... –

答えて

0

abstract classあなたがオブジェクト指向言語で記述されていると呼ばれています。 Objectove-Cは抽象クラスをサポートしていません。ただし、スーパークラス内でメソッドを宣言し、その実装で例外をスローすることができます。これにより、サブクラスはそのサブクラスをオーバーライドして、必要な動作を実装します。 StackOverflowからこのポストを参照してください。ここ

0

は、私はあなたの質問を理解していないが、ここでのショットです:

@interface Subclass1 : MasterClass 

そして、いつものようにあなたの方法を実装する:あなたはこのようなあなたのインターフェイスを定義します。 宣言:

-(MyObject*)doSomething; 

実装:

-(MyObject*)doSomething{ 

//Stuff... 

} 
0

iは、明示的なサブクラス構造の場合に使用するものです:

@class MyObject; 

@interface MONBase : NSObject 

/* required override */ 
-(MyObject *)doSomething; 

/* ... */ 

@end 

@implementation MONBase 

/* ... */ 

-(MyObject*)doSomething 
{ 
    assert(0 && "this override is required"); 
    return nil; 
} 

@end 

しかし ...プロトコルは、一般的に、多くの場合、これらと似たようなケースでは、より便利です。これを達成するための1つの方法が以下に示されています。それはプロトコルを実装し、共有ベースから継承 - OPでの使用に由来し、使用:

@class MyObject; 

@protocol MONProtocol 

/* required overrides: */ 
@required 
- (MyObject *)doSomething; 

/* optional overrides: */ 
@optional 

@end 

/* base, with shared implementation */ 
@interface MONBase : NSObject 
@end 

@implementation MONBase 

- (MyObject *)doSomething 
{ 
    /* 
    as long as the sig matches, you won't need to declare it in the interface -- that may be a good thing. 
    you may prefer *not* to implement this, if you favor a runtime exception 
    */ 
    assert(0 && "this MONProtocol override is required"); 
    return nil; 
} 

@end 

/* subclass of MONBase which extends by implementing MONProtocol */ 
@interface MONSub : MONBase <MONProtocol> 
{ 
    MyObject* theIvar; /* << simplest case implementation */ 
} 

@end 

@implementation MONBase 

/* ... */ 

- (MyObject *)doSomething 
{ 
    return [[theIvar retain] autorelease]; 
} 

@end 

プロトコルは、彼らが多重継承の多くの利点を提供するため、いいです、と非常に少ないの依存関係を提供しています。