2009-06-23 20 views
13

クラスVehicleに "StartEngine"というメソッドがあり、 "Airplane"というサブクラスで "StartEngine"をオーバーライドしたいとします。 C#を使用している場合は、AirplaneのStartEngineメソッドの宣言/定義で "override"キーワードを使用する必要があります。Objective-Cに相当するC#のオーバーライド

"StartEngine"の代わりに "startengine"と入力すると、C#は不平を言いますが、Objective-Cはそのキーワードのおかげではありません。

答えて

15

:ここ

は飛行機のstartEngine方法がどのようなものであるかです。 C#のoverrideキーワード、またはそのvirtualキーワードのようなものはありません。

+0

これは理にかなっています。私はちょうど方法が客観的に何であるかを学びました.c:実際の関数の名前とエンコーディングへのポインタ...余分なものはありません。 –

+0

それはまた多型ですか? – Henri

+0

Objective-Cのすべてのメソッドは、クラスメソッドを含む多型です。これはC#、Java、C++の静的メソッドとは異なり、多態性ではありません。 –

11

確かに可能です。しかし、オーバーライドキーワードはありません。あなたのサブクラスで同じシグネチャを持つ関数を宣言するだけで、スーパークラスのバージョンの代わりに呼び出されます。 Objective-Cのすべてのクラスとインスタンスメソッドを動的に派遣され、サブクラスでオーバーライドすることができ

- (void)startEngine 
{ 
    // custom code 

    // call through to parent class implementation, if you want 
    [super startEngine]; 
} 
+2

質問を明確にしました。私はオーバーライドがobjective-cで可能であることを知っています。コンパイラが実際にメソッドをオーバーライドし、サブクラスに新しいメソッドを作成しないことをチェックするだけです。 –

+0

ああ - そうです。残念ながら、Objective-Cコンパイラはこれを行う方法を提供していません。ちょっと - 存在しない関数を呼び出すだけでも警告です! :-)その場合の最善の策は、抽象基本クラスのメソッド実装がNSExceptionsをスローするようにすることだと思います。 –

2

Objective-Cのすべてのメソッドはオーバーライド可能ですが、同じシグネチャのメソッドを記述するだけです。