나는 Variables doesn't exhibit polymorphic behavior을 알고 있으며 그 방법이 제한적입니다. 그러나 아래 코드는 객체 유형을 반환하는 데 약간 혼란 스럽습니다.재정의 된 메서드가 다형성 동작을 나타내지 않는 이유는 무엇입니까?
자식 메서드를 호출하면 (즉, 오른쪽) 자식 개체를 반환한다는 것을 의미합니다. 그렇다면 왜 자식 변수의 값을 출력하지 않을까요?
class Parent {
int var = 11;
public Parent getInstance() {
System.out.println("In Parent ...");
return new Parent();
}
}
class Child extends Parent {
int var = 22;
public Child getInstance() {
System.out.println("In Child ...");
return new Child();
}
}
public class VariableHiding {
public static void main(String[] args) {
Parent p = new Child();
System.out.println(p.getInstance().var); // something's fishy?
}
}
// Output : In Child ... 11
PS : (변수 다형성에 참여하지,하지만 여기에 언급 된 사람이 자식 OBJ의 객체를 반환하고 obj가 자신 대신에 부모의 VAR 보유에 대해 이야기) this one의 그것하지 중복
하지만 p.getInstance()는 CHILD 객체로 평가됩니다. 맞습니까? –
@ 런타임 유형은 컴파일 타임 유형이 아닌 하위입니다. – Eran