クラスメソッドとインスタンスメソッド
クラス・メソッドの定義はヘッダファイルに@interface から始まり@endで終了するブロック内に定義します。メソッドの先頭に付いている「 - 」ですが、これにはちゃんと意味があって、「 - 」がインスタンスメソッド、「 + 」がクラスメソッドという区別になります。
修飾子 | 意味 |
---|---|
- | インスタンスメソッド 例)[instance method]; |
+ | クラスメソッド。javaのstaticなメソッドと同等です。NSObjectクラスのallocメソッド等がこれに該当します。 例)[Class method]; |
メソッドのオーバーライド
Objective-CもC++やJavaと同じようにメソッドのオーバーライドがが可能です。特に説明するまでも無く、サンプルを見ていただければ理解出来ると思います。
#import <Foundation/NSObject.h> #import <stdio.h> @interface A : NSObject { int a; int b; } - (id) init; - (int) add; @end @implementation A - (id) init { self = [super init]; if (self != nil) { a = 1; b = 5; } return self; } - (int) add { return a + b; } @end @interface B : A { } - (id) init; - (int) add; //オーバーライド @end @implementation B - (id) init { self = [super init]; } //オーバーライド - (int) add { return a + b + 10; } @end int main(void) { A *classA = [[A alloc] init]; int value = [classA add]; B *classB = [[B alloc] init]; int value2 = [classB add]; printf("Class A value : %d\n", value); printf("Class B value : %d\n", value2); return 0; }
オーバーライドサンプルコード
以下、実行結果
Class A value : 6
Class B value : 16
Class B value : 16
上のクラスはクラスBはクラスAを継承しており、クラスBのメソッド「add」はクラスAのメソッド「add」をオーバーライドしています。
オーバーライドメソッドからスーパークラスのメソッドを呼び出すにはこのようにします。
- (int) add { return [super add]; //スーパークラスのメソッドを呼び出し }
スーパークラスメソッドの呼び出し
このあたり、はc++/Javaと同様ですので、すんなり理解できます。
0 件のコメント :
コメントを投稿