クラスメソッドとインスタンスメソッド
クラス・メソッドの定義はヘッダファイルに@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 件のコメント :
コメントを投稿