私は元々 Java プログラマーで、現在は Objective-C を使っています。抽象クラスを作成したいのですが、Objective-C ではそれができないようです。これは可能ですか?
そうでない場合、Objective-C で抽象クラスにどれだけ近づくことができますか?
ベストアンサー1
通常、Objective-C クラスは慣例上抽象的です。作成者がクラスを抽象としてドキュメント化している場合は、サブクラス化せずに使用しないでください。ただし、抽象クラスのインスタンス化を妨げるコンパイル時の強制はありません。実際、カテゴリを介して (つまり実行時に) 抽象メソッドの実装を提供することをユーザーが阻止するものは何もありません。抽象クラスでそれらのメソッドの実装で例外を発生させることで、ユーザーに少なくとも特定のメソッドをオーバーライドするように強制できます。
[NSException raise:NSInternalInconsistencyException
format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];
メソッドが値を返す場合は、使いやすくなります
@throw [NSException exceptionWithName:NSInternalInconsistencyException
reason:[NSString stringWithFormat:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)]
userInfo:nil];
メソッドから return ステートメントを追加する必要はありません。
抽象クラスが実際にはインターフェースである場合(つまり、具体的なメソッド実装がない場合)、Objective-C プロトコルを使用する方が適切なオプションです。