메서드에 대한 호출과 실제 구현된 메서드의 코드와 연결되는 것을 바인딩(binding)이라고 한다. 바인딩에는 크게 정적 바인딩(static binding) 과 동적 바인딩(dynamic binding) 이 있다
정적 바인딩(static binding) 은 객체의 타입이 컴파일러에 의해 컴파일되는 시점에 결정되는 것을 말하며 private final static 메서드의 경우 모두 정적 바인딩이 된다. ( 모두 상속과 오버라이딩이 안되는 것들이다. )
동적 바인딩(dynamic binding) 은 객체의 타입이 실행 중에 결정되는 것을 말하며, 오버라이딩 된 메서드가 동적바인딩을 한다.
public class TestBinding {
public static void main(String[] args) {
Parent p = new Child();
p.display();
}
}
class Parent {
void display() {
System.out.println("Parent display");
}
}
class Child extends Parent {
void display() {
System.out.println("Child display");
}
}
위 코드처럼 오버라이딩 된 메서드가 있을 경우 해당 메서드를 호출하는 코드 p.display(); 는 컴파일 시에는 정적 바인딩, 실행 시에는 조상과 자손 클래스 중 어떤 메서드를 호출할 것인가를 판단하여 동작하게 된다. 이처럼 실행 중 판단하여 동작하는 것을 동적 바인딩이라고 한다.