Java에서 멤버 함수 재정의 개념을 탐구하면서 멤버 변수 재정의를 실험해 보았습니다. 이를 위해 다음과 같은 클래스 구조를 만들었습니다.
class A { public int intVal = 1; } class B extends A { public int intVal = 2; } class MainClass { public static void main(String[] args) { A a = new A(); B b = new B(); A aRef; aRef = a; System.out.println(aRef.intVal); aRef.identifyClass(); aRef = b; System.out.println(aRef.intVal); aRef.identifyClass(); } }
이 코드를 실행하면 다음과 같은 출력이 생성됩니다.
1 I am class A 1 I am class B
aRef.intVal이 생성된 후에도 1로 유지되는 이유에 대해 혼란을 표현하셨습니다. 클래스 B의 인스턴스에 할당되었습니다. 이 미스터리를 풀려면 제시한 시나리오에서 변수 숨기기가 아닌 변수 숨기기를 다루고 있다는 점을 이해하십시오. 재정의.
Java에서는 슈퍼클래스와 서브클래스에 같은 이름의 변수를 가질 수 있습니다. 이 변수 숨기기 기술은 슈퍼클래스 변수를 효과적으로 숨깁니다. 그러나 두 변수는 해당 클래스 내에서 계속 독립적으로 존재합니다.
슈퍼클래스 참조에서 변수에 액세스하면 슈퍼클래스 변수와 상호작용하게 됩니다. 참조 자체는 그것이 가리키는 개체의 클래스에 영향을 받지 않습니다. 따라서 aRef가 클래스 B의 인스턴스를 가리키더라도 aRef가 속한 클래스이기 때문에 클래스 A에서 intVal 변수에 액세스합니다.
하위 클래스(B)에서 intVal 변수에 액세스하려면 슈퍼클래스를 참조하는 super 키워드를 활용할 수 있습니다. 이 접근 방식을 사용하면 슈퍼클래스와 서브클래스에서 동일한 이름을 가진 변수를 구별할 수 있어 모호성을 해결할 수 있습니다.
위 내용은 Java에서 멤버 변수를 재정의할 때 변수 숨김이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!