다형성이 궁금하신 분들은 이전 포스팅을 보고 오시기 바랍니다.
상속 관계에서 업캐스팅 후 메서드를 실행할 때, 컴파일 단계에서의 실행 대상과 실행 단계에서의 실행 대상이 달라지는 것.
즉, 참조 변수의 타입과 무관하게 실제 인스턴스의 메소드를 실행하는 것을 말한다.
class A {
void exe() {
System.out.println("A");
}
};
class B extends A {
void exe() {
System.out.println("B");
}
};
class C extends A {
void exe() {
System.out.println("C");
}
};
public class Main {
public static void main(String[] args) {
// 동적 바인딩
C var1 = new C();
var1.exe();
A var2 = null;
var2 = (A)var1;
var2.exe();
}
}
결과
위 예제를 통해 형변환이 참조변수의 타입을 변환하는 것이며 인스턴스를 변환하는 것이 아니라는 것을 알 수 있다.
이것이 동적바인딩이며 다형성의 주요한 특징이다.
단지, 참조변수를 형변환 함으로써 인스턴스에서 사용할 수 있는 멤버의 개수를 조절할 수 있다는 장점이 있다.