변수 숨기기는 하위 클래스가 상위 클래스의 멤버 변수와 동일한 이름의 멤버 변수를 정의할 때 발생합니다. 구현을 대체하는 함수 재정의와 달리 변수 숨기기는 동일한 이름의 새 변수로 슈퍼클래스 변수를 모호하게 합니다.
다음 Java 코드를 고려하세요.
public class A { public int intVal = 1; public void identifyClass() { System.out.println("I am class A"); } } public class B extends A { public int intVal = 2; public void identifyClass() { System.out.println("I am class B"); } } public 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
이 예에서 intVal 변수는 A와 B 클래스. B의 멤버 변수는 A의 변수를 숨깁니다. 결과적으로 aRef를 b로 설정하면 액세스되는 intVal 값은 여전히 1이며, 이는 A의 intVal의 기본값입니다.
숨겨진 변수에 액세스하려면 슈퍼클래스의 경우 super.var 또는 ((SuperClass)this).var를 사용할 수 있습니다. 예를 들면 다음과 같습니다.
aRef = b; System.out.println(aRef.intVal); // Outputs 1, the value of A's intVal System.out.println(((A)aRef).intVal); // Outputs 2, the value of B's intVal
aRef를 슈퍼클래스에 명시적으로 캐스팅하면 숨겨진 멤버 변수에 액세스할 수 있습니다.
변수 숨기기를 사용하면 하위 클래스가 다음과 같은 이름으로 자체 변수를 정의할 수 있다는 점을 기억하세요. 슈퍼클래스 변수이지만 완전히 재정의하지는 않습니다. 두 변수가 공존하며 하위 클래스 변수가 상위 클래스 변수를 섀도잉합니다.
위 내용은 Java의 변수 숨기기는 함수 재정의와 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!