>Java >java지도 시간 >Java의 변수 숨기기는 함수 재정의와 어떻게 다릅니까?

Java의 변수 숨기기는 함수 재정의와 어떻게 다릅니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-17 08:12:25297검색

How Does Variable Hiding in Java Differ from Function Overriding?

Java의 멤버 변수 숨기기(재정의) 이해

변수 숨기기는 하위 클래스가 상위 클래스의 멤버 변수와 동일한 이름의 멤버 변수를 정의할 때 발생합니다. 구현을 대체하는 함수 재정의와 달리 변수 숨기기는 동일한 이름의 새 변수로 슈퍼클래스 변수를 모호하게 합니다.

다음 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.