A클래스와 이를 상속받는 B클래스가 있다.

 

class A

{

func() {m();}

m() {}

};

 

class B : public A

{

m() {}

};

 

 

이런식으로 구성이 되어있을때, B클래스의 func 함수를 호출하면, A클래스의 m 함수가 호출될까?

 

아니면 B 클래스의 m함수가 호출될까?

 

C++에서는 A클래스의 m함수가 호출되고, Java에서는 B클래스의 m함수가 호출된다.

 

그 이유는, static binding과 dynamic binding의 차이인데,

 

static binding에서는 컴파일 타임에 실행될 함수를 미리 결정하는 반면 (C++)

 

dynamic binding에서는 run-time때 실행될 함수를 결정하기 때문이다. (Java)

 

 이것을 Polymorphism, 가상함수와 관련지어서 얘기해보면

 

static binding은 객체타입의 function을 call 하는 반면,

 

dynamic binding은 실제 타입의 function을 call하기 때문에, Polymorphism이 가능해진다.





Posted by huammmm1
,