본문 바로가기

C/Objective C/Objective C

Objective C method overriding(메소드 재정의) 예제 따라하기

메서드 재정의하기

상속받은 메서드를 ‘재정의’하여 메서드 정의를 변경할 수 있다. 앞서 본 클래스 ClassA와 ClassB로 돌아 가서 initVar 메서드를 ClassB에 작성하고 싶다고 하자. 이미 ClassB는 ClassA에 정의된 initVar 메서드 를 상속받는다는 것을 알 것이다. 이 상속받은 메서드를 제거하고 동일한 이름으로 새 메서드를 만들 수 있을까? 대답은 ‘그렇다’이다. 그저 동일한 이름으로 메서드를 새로 정의하기만 하면 된다.

부모 클래스에 있는 메서드와 동일한 이름으로 메서드를 정의하면, 새로운 내용이 상속받은 메서드를 대치 하거나 재정의한다.
새 메서드는 반환 형, 인수 개수, 데이터 형이 재정의하는 메서드와 같아야 한다.

- 소스코드 

#import <Foundation/Foundation.h>


@interface ClassA : NSObject

{

int x;

}

-(void) initVar;

-(void) printVar;


@end 

#import "ClassA.h"


@implementation ClassA

-(void) printVar{

NSLog(@"x = %i",x);

}

-(void) initVar{

x = 100;

}

@end 

#import <Foundation/Foundation.h>

#import "ClassA.h"

@interface ClassB : ClassA

-(void) printVar;

-(void) initVar;


@end 

#import "ClassB.h"


@implementation ClassB

-(void) printVar{

NSLog(@"x = %i",x);

}

-(void) initVar{

x = 200;

}

@end 

#import <Foundation/Foundation.h>

#import "ClassB.h"

int main(int argc, const char * argv[])

{

ClassA *a = [[ClassA alloc]init];

ClassB *b = [[ClassB alloc]init];

[a initVar];

[a printVar];

[b initVar];

[b printVar];

    return 0;

} 


- 실행화면