メソッドのオーバーライド
メソッドのオーバーライドは、クラスが既に、親クラスの1つで提供されているメソッドの実装を提供することが可能なクラスの言語機能です。このクラスの実装は、親クラスの実装を置き換え(つまり、オーバーライド)します。
親クラスと同じ名前のメソッドを定義すると、その新しいメソッドは継承された定義を置き換えます。新しいメソッドは、同じ戻り値の型を持っていて、オーバーライドしているメソッドと同じパラメータの数と型を取る必要があります。以下に例を示します:
@interface MyClass : NSObject { } - (int)myNumber; @end @implementation MyClass : NSObject { } - (int)myNumber { return 1; } @end @interface MySubclass : MyClass { } - (int)myNumber; @end @implementation MySubclass - (int)myNumber { return 2; } @end
MyClass のインスタンスを作成し、それに myNumber メッセージを送信する場合は、1 を返します。MySubclass のインスタンスを作成し、それに myNumber メッセージを送信する場合は、2 を返します。
サブクラスのメソッドはスーパークラスのオーバーライドされたメソッドと同じ名前とパラメータリストを持つ必要があることに注意してください。
完全に既存の実装と交換するだけでなく、スーパークラスの実装を拡張したい場合があります。これを行うには、super のキーワードを使用してスーパークラスの実装を呼び出すことができます。
メソッド定義の中の、super は現在のオブジェクトの親クラス(スーパークラス)を指します。メソッドのスーパークラスの実装を実行するために、super にメッセージを送信します。多くの場合、その機能を拡張するために、同じメソッドの新しい実装内でこれを行います。以下の例では、MySybclass による myNumber の実装は、MyClass の実装によって返される値が何であれ、それに1 を加算します。
@implementation MySubclass - (int)myNumber { int subclassNumber = [super myNumber] + 1; return subclassNumber; } @end
前提条件の記事
(なし)
関連記事
(なし)
既出の議論
Objective-C でのプログラミング のオブジェクトは、そのスーパークラスで実装されるメソッドを呼び出せます
次の章
前の章