2

私は現在、すでにスーパークラスを持っているクラスを持っています。別の既存のクラスからメソッドも呼び出したいのですが、スーパークラスとして定義されていません。2番目のスーパークラスを既存の子クラスに割り当てることは可能ですか、それとも不可能ですか。

可能であれば、どうすればいいですか。それが不可能な場合、回避策は何ですか?

4

2 に答える 2

3

不可能です。Objective-C は単一継承です。

状況によっては、Compositionがこれを回避するための適切なパターンになる場合があります。クラス Foo があり、Foo のインスタンスにもクラス Bar から動作を継承させたいとします。

Bar のインスタンスを Foo 内のインスタンス変数として保持し、メソッド呼び出しを委任できます。Objective-C は動的に型付けされるため、Foo のインスタンスを Bar のインスタンスとして単純にキャストし、Bar を期待する任意のコードに渡すことができます。Foo が Bar と同じすべてのメソッドに応答する限り、誰もその違いを知りません。

工夫を凝らしたい場合 (または Bar のメソッドが多すぎて、それぞれを書き出したくない場合)、メッセージ転送を使用して、Foo クラスが認識しないメッセージを Bar インスタンスに渡すことができます。のドキュメントforwardInvocation:を参照して、これがどのように機能するかを確認してください。

于 2012-11-26T07:08:47.680 に答える
1

Objective C は多重継承をサポートしていませんが、インターフェイスを使用してこの機能を実現できます。

于 2012-11-26T07:05:31.507 に答える