2 つのサブクラスがあります。Base から継承する SubA と SubB。
サブクラスには同じメソッド SubMethodA があります。このメソッドは、両方のサブクラスに対してまったく同じ方法で記述されます。その違いは実行にあります。SubMethodA 内で、サブクラスに応じて異なる方法で実行される SubMethodB を呼び出します。
SubMethodA を Base に移動できると考えましたが、もちろん Base は SubMethodB について知りません。
• 最初の試行: SubMethodA のプロトタイプとその実装を Base クラスに追加しました。次に、SubMethodB のプロトタイプを Base のインターフェイスに追加しました。Base の実装では、SubMethodB を空のスタブとして実装しました。これにより、サブクラスへの「パススルー」が可能になります。サブクラスは SubMethodB をオーバーライドします。これは機能しましたが、何かがおかしいと感じました。これを機能させるためだけに空のスタブを用意するのは正しくありません。理由はわかりませんが、私の内なるプログラマーは満足していませんでした。
• 2 回目の試行: Base ヘッダーに SubMethodB プロトタイプを残しました。空のスタブを削除したところ、もちろん「実装が不完全です」という警告が表示されました。正しくコンパイルおよび実行されますが、正しくありません。
• 3 回目の試行: Base ヘッダーからプロトタイプを削除しました。最後の警告はなくなりましたが、新しい警告が表示されました。「インスタンスメソッド '-SubMethodB:' が見つかりません (戻り型のデフォルトは 'id')」. 繰り返しますが、警告は意味があり、コードは適切に実行されますが、これは正しくありません。
• 4 回目の試行: 両方のサブクラスによって実装される「BaseProtocol」という @protocol を作成しました。サブAとサブB。前回の試行と同じ警告がまだあります。
• 5 回目の試行: 最後の試みとして、問題のあるコードを "[self conformsToProtocol:@protocol(BaseProtocol)]" で囲み、このメソッドが実際にサブクラス化して警告を表示しませんが、違いはありませんでした。前回と同じ予告。
だからここに私の質問があります:
- サブクラスのメソッドを呼び出す基本クラスのこの考えは夢物語ですか、それとも警告なしでこれを適切に実行できる方法はありますか?
- 基本クラスの 2 つのサブクラスにあるのとまったく同じコードを持ちたいという私の思考パターンは間違っていますか?
ヘルプ、洞察、または提案をいただければ幸いです。