4

重複の可能性:
ObjectiveCで抽象クラスを作成する

Javaでは、抽象クラスを使用して、一連のクラスが同じ基本的な動作をするようにします。例:

public abstract class A
{
// this method is seen from outside and will be called by the user
final public void doSomething()
{
// ... here do some logic which is obligatory, e.g. clean up something so that
// the inheriting classes did not have to bother with it

reallyDoIt();
}
// here the actual work is done
protected abstract void reallyDoIt();

}

これで、クラスBがクラスAから継承する場合、実装するだけで済みますreallyDoIt()

これをObjectiveCで作成するにはどうすればよいですか?それは可能ですか?Objective Cで実行可能ですか?つまり、Objective Cではパラダイム全体が異なっているように見えるということです。たとえば、メソッドのオーバーライドを禁止する方法がないことを私が理解しているものとは異なります(Javaの「final」のように)。

ありがとう!

4

2 に答える 2

11

Objectivecのメソッドをオーバーライドしないという実際の制約はありません。Dan Listerが彼の回答で提案したようにプロトコルを使用できますが、これは、そのプロトコルで宣言された特定の動作を実装するように準拠クラスを強制する場合にのみ有効です。

Objective cの抽象クラスの解決策は次のようになります:

interface MyClass {

}

- (id) init;

- (id) init {
   [NSException raise:@"Invoked abstract method" format:@"Invoked abstract method"]; 
   return nil;
}

このようにして、抽象クラスのメソッドが呼び出されないようにすることができます(ただし、コンパイル時にこれを検出できるjavaのような言語とは異なり、実行時にのみ)。

于 2012-06-27T08:39:02.950 に答える
4

あなたはProtocols私が思うと呼ばれるものを使いたいと思うでしょう。

于 2012-06-27T08:32:25.397 に答える