다음 코드의 경우 왜 A, B를 인쇄합니까? B, B를 인쇄 할 것으로 예상됩니다. 또한 JVM에서 수행하는 메서드 호출이 동적으로 또는 정적으로 평가됩니까?Java 메소드 호출 과부하 논리
public class Main {
class A {
}
class B extends A {
}
public void call(A a) {
System.out.println("I'm A");
}
public void call(B a) {
System.out.println("I'm B");
}
public static void main(String[] args) {
Main m = new Main();
m.runTest();
}
void runTest() {
A a = new B();
B b = new B();
call(a);
call(b);
}
}
감사합니다. 그렇다면 동적으로 평가되는 것은 무엇입니까? –
@Maxim Veksler : 재정의 (override) - 이것은 컴파일 타임 타입이 아닌 대상 객체의 * 실제 * 타입에 의해 결정됩니다. –
존 감사합니다. –