수퍼 클래스 A와 서브 클래스 B 모두 변수 abc는 각각 10과 20이고 callme()는 서브 클래스에서 재정의됩니다. 내가왜 java ref vars는 변수가 ref 변수 유형을 기반으로하는 실제 객체를 기반으로 메소드를 호출합니까?
a.callme() -> calls B's method
b.callme() -> calls A's method.
를 작성하는 경우 그때
A a = new B();
B b = B(new A());
을 할 경우 방법은 실제 객체를 기반으로 호출되기 때문에
이입니다. 내가
str = a.abc; // will print 10 , based upon ref var type A
str = b.abc; // will print 20 , based upon ref var type B
을 할 경우 왜 이런 차이는
입니까? 왜 메소드와 변수 모두 실제 객체를 기반으로 액세스하지 않습니까?
일부 설명은 (http://download.oracle.com/javase/tutorial/java/IandI/hidevariables.html) –
나는 그것에 대해 알고 있었다. 하위 클래스 인스턴스 변수는 수퍼 클래스 변수를 동일한 이름으로 숨 깁니다. –
나는 분명히 물어볼 수 없었다고 생각한다. 나는 필드가 서브 클래스 필드로 숨겨진다는 것을 이해했다. 그게 정확한 논리 응답이야. 나는 왜 메소드와 필드가 객체 참조 변수 유형과 실제 객체 유형에 기반하여 호출되는지에 대해 물어보고 싶습니까? 이것은 뭔가 방법과 필드가 메모리에 저장되는 방법과 관련이 있습니까? 아무도 이것을 설명 할 수 있습니까? –