a.x
의 값은 무엇입니까?동적 바인딩 호출은 어떤 함수를 사용합니까?
동적 바인딩은 super.f()
이 호출되기 때문에 수퍼 클래스에서 g()
함수를 선택한다고 생각합니다. 또는 내가 잘못하고 동적 바인딩 g()
의 재정의 함수를 호출하므로 결과는 27이됩니까? 그렇다면 왜? 자바
a.x
의 값은 무엇입니까?동적 바인딩 호출은 어떤 함수를 사용합니까?
동적 바인딩은 super.f()
이 호출되기 때문에 수퍼 클래스에서 g()
함수를 선택한다고 생각합니다. 또는 내가 잘못하고 동적 바인딩 g()
의 재정의 함수를 호출하므로 결과는 27이됩니까? 그렇다면 왜? 자바
나는 무슨 일이 일어나고 있는지 추적하는 코드를 수정했습니다
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() 메소드가 호출되는 이유입니다.
모든 인스턴스 메서드, 그래서 B.g()
가 호출 가상하고 대답은 27
입니다.
방금이 코드를 실행 해 보셨습니까? – StephaneM
@StephaneM 27 세가되었지만 그 이유는 모르겠다. – Stanko
@Michiel "이유"로 정확히 무엇을 의미합니까? Java의 의미입니다. 이 방법으로 정의됩니다. – kraskevich