0

私はobjective-Cが初めてで、それが正しいかどうか疑問に思っています:クラスがあります

@interface BaseClass : NSObject

そして、そのクラスのオブジェクトを作成しました:

BaseClass *baseClassObject = [[BaseClass alloc] initWith...];

その後、私は別のクラスを持っています:

@interface AdvancedClass : BaseClass

BaseClass (オブジェクト初期化子、後でメソッド) で取得しているデータに応じて、オブジェクトの機能を拡張したい場合があります。だから私は baseClassObject が AdvancedClass クラスのオブジェクトになりたいです。

1) これは正しいですか? 2)そのようなオブジェクトを「宣伝」することは可能ですか?

4

3 に答える 3

1

いいえ、インスタンスがある場合、BaseClassそれをのインスタンスであるかのように扱うことも、AdvanceClass魔法のようにインスタンスに「プロモート」することもできませんAdvancedClass。ただし、できるAdvanceClassことは、のインスタンスを初期化子として使用して新しいものを作成することですBaseClass

例えば:

BaseClass* baseInstance = [[BaseClass alloc] init];
...
AdvancedClass* advancedInstance = [[AdvancedClass alloc] initWithBaseClass:baseInstance];
于 2012-06-19T19:01:08.650 に答える
1

それは可能で正しいことです。これはポリモーフィズムと呼ばれ、オブジェクト指向プログラミングの主要な原則の 1 つです。必要な機能の種類に応じて、メソッドで基本クラスまたはサブクラスのインスタンスを作成するだけです。

于 2012-06-19T15:33:55.207 に答える
0

別のクラスのサブクラスであるクラスを作成することは完全に受け入れられます。別の方法として、カテゴリを使用することもできます。

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html

于 2012-06-19T15:29:37.470 に答える