X z = new Y();
은 컴파일시에 class X
의 인스턴스로 z
을 처리하지만 런타임에 class Y
의 인스턴스로 처리한다는 것을 의미합니다.컴파일 시간/런타임 추가
그렇다면 이유 : z.method((byte)0 + (char)0);
은 런타임에 처리 되었습니까? 이러한 2 개의 상수가 합산되지 않으므로 런타임 대신 컴파일 타임에 결정될 수 있습니까?
class X {
void method(int x) { System.out.println("X:int"); }
}
class Y extends X {
void method(int x) { System.out.println("Y:int"); }
}
public class Z {
public static void main(String[] args) {
X x = new X();
X z = new Y();
System.out.println("1:");
z.method((byte)0 + (char)0);
}
}
출력 : 추가가 관련이 어떻게 표시되지 않습니다
1:
Y:int
초보자를위한 힌트 : 이전 조사를해야합니다. 특히 자바를 처음 접해 보았을 때 :이 질문을하는 첫 번째 인물이 아닌 가능성이 매우 높습니다. 따라서 좋은 질문을 작성하기 위해 15 분을 소비하기 전에이 질문이 전에 부탁되었는지 확인하는 데 단지 몇 분이 걸렸습니다. – GhostCat
알아,하지만 모든 해당 조항을 어떻게 알았습니까? – LifeisHard
왜 개정 내역에 더 이상 표시되지 않는지 모르겠다. 원래 질문은 오버로드 된 메소드에 'null'을 전달하는 것이었다. –