2012-05-15 5 views
3

함수가 호출 될 때 런타임에 모든 객체가 생성된다는 것을 알고 있습니다.런타임시 실제 객체가 결정되는 경우 컴파일시에 초기 바인딩이 해결되는 이유는 무엇입니까?

바인딩은 클래스 내부의 메소드 데이터 멤버를 바인딩 할 때입니다.

초기 바인딩은 컴파일 할 때 모든 메소드 인스턴스 변수를 바인딩합니다. 런타임시 모든 객체가 생성되므로 모든 메소드 데이터 멤버를 런타임에 바인딩해야한다고 생각했습니다.

왜 초기 바인딩에서 개체 메서드에 대한 호출이 컴파일 타임에 결정됩니까? 해당 객체가 런타임에 생성되는 경우

예를 들면.

class A{ 
    public void foo(){ 
     //some code here 
    } 
} 

public static void main(String[] args){ 
    A aInstance = new A(); 
    aInstance.foo(); 
} 

foo()는 컴파일 타임에 해결되었지만 런타임에는 런타임에 결정됩니다.

+0

어떻게 그 코드로 '인스턴스 A'가 다른 클래스가 될 수 있습니까? – Mat

+1

이것은 잘못된 태그로 질문 된 Java 질문입니다. 태그 다시 지정. – iammilind

답변

0

호출을 바인드하려면 호출 할 메소드 (또는 함수)를 결정하고 호출 할 인스턴스를 결정하지 말아야합니다.

호출이 약간 더 빠르게 실행되기 때문에 조기 바인딩이 바람직합니다.

런타임에 바인딩을 지연시키는 유일한 이유는 다형성 일 수 있습니다. 여기서 정확한 유형의 객체조차도 컴파일 유형에서 알 수 없습니다. 또는 VMT 조회 비용에 신경 쓰지 않는 간단한 컴파일러 구현.