이후의 바인딩은 동적 바인딩 또는 런타임 바인딩으로도 알려진 런타임의 물체 유형에 따라 결합을 나타냅니다. 늦은 바인딩을 구현하려면 런타임에 객체 유형을 판단 할 수 있도록 일부 메커니즘은 이에 의해 지원되어야하며, 통화 오버 헤드는 이전 바인딩의 통화보다 큽니다.
정적 방법과 Java의 최종 방법은 초기 바인딩이 최종 방법을 무시할 수 없으며 (정적 및 비 정적 포함) 조기 바인딩입니다. 정적 방법과 최종 방법을 제외한 다른 방법 (개인은 최종 방법에 속합니다)은 나중에 바인딩되며 런타임 동안 바인딩을위한 객체의 유형을 결정할 수 있습니다. 확인 절차는 다음과 같습니다.
코드 사본은 다음과 같습니다.
클래스베이스
{
// 멤버 변수, 서브 클래스도 동일한 멤버 변수 이름을 갖습니다.
공개 문자열 테스트 = "기본 필드";
// 정적 메소드, 서브 클래스에는 동일한 서명의 정적 메소드도 있습니다.
public static void staticmethod ()
{
System.out.println ( "Base staticMethod ()");
}
// 서브 클래스는이 메소드를 무시합니다
공개 void notstaticmethod ()
{
System.out.println ( "Base NotstaticMethod ()");
}
}
공개 클래스 파생 확장 기반
{
공개 문자열 테스트 = "파생 필드";
public static void staticmethod ()
{
System.out.println ( "staticMethod () 도출");
}
@보수
공개 void notstaticmethod ()
{
System.out.println ( "Degive NotstaticMethod ()");
}
// 멤버 변수의 값을 출력하고 이전 바인딩인지 확인하십시오.
공개 정적 void testfieldbind (기본베이스)
{
System.out.println (base.test);
}
// 정적 메소드는 이전 바인딩인지 확인하십시오.
공개 정적 무효 TestStaticMethodbind (기본베이스)
{
// 유형베이스의 정적 메소드 테스트 ()는 정적 방식으로 액세스해야합니다.
// base.test ()를 사용하는 것이 더 합리적입니다.
base.staticMethod ();
}
// 비 정적 메소드를 호출하고 바인딩이 늦었는지 확인하십시오.
공개 정적 void testNotStaticMethodbind (기본베이스)
{
base.notstaticMethod ();
}
public static void main (String [] args)
{
DERIVE D = New DeTive ();
Testfieldbind (d);
teststaticmethodbind (d);
testNotStaticMethodbind (d);
}
}
/*프로그램 출력 :
기본 필드
기본 정적 메드 ()
notstaticmethod () 도출
*/