super
クラスを継承した子クラスでは、親クラスを同じ名前のメソッドを作り、処理を置き換えることが出来る。これをオーバーライドという。
オーバーライドした時でも、親のメソッドを呼び出す必要がある場合は「super」を使う。
(親クラスは英語で「SuperClass」と書く。子クラスは「SubClass」。)
@interface SuperClass : NSObject // 変数がないので{}は省略 - (void)method; @end @interface SubClass : SuperClass // 変数がないので{}は省略 -(void)method; // 同一名関数を作りオーバーライドする @end @implementation SuperClass - (void)method { printf("SuperClass.method\n"); } @end @implementation SubClass -(void)method { printf("SubClass.method\n"); [super method]; // [SuperClass method]を呼び出す } @end void CallMethod(id obj) { [obj method]; } int main() { CallMethod([SuperClass alloc]); // [SuperClass method]が実行される CallMethod([ SubClass alloc]); // [SubClass method]が実行される→その中で[SuperClass method]も呼び出される return 0; } 実行結果(未確認) SuperClass.method SubClass.method SuperClass.method
こうした時、CallMethod()は引数によって呼び出し関数を変更することになる。
Cではswitch caseか関数のアドレスを持つ配列を使った呼び出しUByte (*fnc)()[]を使ったが、
その辺りの記述が大幅に簡潔になる。
superはselfとは違いアドレスを示すものではなく予約語なので、super->という使い方は出来ない。
0 件のコメント:
コメントを投稿