2015-01-21 2 views
-2

a.x의 값은 무엇입니까?동적 바인딩 호출은 어떤 함수를 사용합니까?

동적 바인딩은 super.f()이 호출되기 때문에 수퍼 클래스에서 g() 함수를 선택한다고 생각합니다. 또는 내가 잘못하고 동적 바인딩 g()의 재정의 함수를 호출하므로 결과는 27이됩니까? 그렇다면 왜? 자바

dynamic binding exercise

+2

방금이 코드를 실행 해 보셨습니까? – StephaneM

+0

@StephaneM 27 세가되었지만 그 이유는 모르겠다. – Stanko

+0

@Michiel "이유"로 정확히 무엇을 의미합니까? Java의 의미입니다. 이 방법으로 정의됩니다. – kraskevich

답변

1

나는 무슨 일이 일어나고 있는지 추적하는 코드를 수정했습니다

public class A { 
    public void f() { System.out.println("A.f");x = x + 4; g();System.out.println(this); } 
    public void g() { System.out.println("A.g");x = x + 10;} 
    public int x = 5; 
    } 


public class B extends A { 
    @Override public void f() { System.out.println("B.f");x = x + 3; super.f(); } 
    @Override public void g() { System.out.println("B.g");x = x + 15; } 
} 

출력은 다음과 같습니다

B.f 
A.f 
B.g 
[email protected] 
27 

g()가 호출 될 때, 당신은 this을 볼 수있는 사실입니다 B 객체 인 경우 B에서 g() 메소드가 호출되는 이유입니다.

0

모든 인스턴스 메서드, 그래서 B.g()가 호출 가상하고 대답은 27입니다.

관련 문제