Java에서 클래스 변수 재정의: 숨겨진 미스터리
이 문제는 클래스 계층 구조, 특히 클래스 계층 구조를 중심으로 회전하는 흥미로운 코드 조각에서 발생합니다. Dad라는 상위 클래스와 Son이라는 하위 클래스가 있습니다. 두 클래스 모두 자신의 정체성을 나타내기 위해 me라는 클래스 변수를 가지고 있습니다. 그러나 문제는 Son 객체를 인스턴스화하고 printMe() 메서드를 호출하는 doIt() 메서드가 예상되는 "son" 대신 "dad"를 인쇄할 때 발생합니다.
클래스 변수를 다음과 같이 사용할 수 있습니까? 재정의?
이 질문에 답하기 위해 Java의 상속 및 재정의 개념을 살펴보겠습니다. 재정의는 하위 클래스가 상위 클래스에 정의된 메서드의 동작을 수정하는 기능을 나타냅니다. 그러나 이 개념은 클래스 변수로 확장되지 않습니다.
숨김 vs. 재정의
클래스 변수의 경우 재정의가 아니라 "숨김"이 발생합니다. " 하위 클래스가 상위 클래스의 변수와 동일한 이름을 가진 클래스 변수를 선언하면 상속된 변수를 바꾸는 대신 숨깁니다. 숨겨진 변수는 하위 클래스 내의 뷰에서 효과적으로 마스크됩니다.
숨겨진 값
예로 돌아가서 Son에서 me를 선언하면 상속된 me 변수가 숨겨집니다. 아빠. 그러나 Dad의 숨겨진 변수는 "dad"라는 값을 유지하며 printMe() 메서드에서 액세스하고 인쇄하는 변수입니다.
대체 솔루션
"son"을 인쇄하는 원하는 결과를 얻기 위한 대체 접근 방식은 하위 클래스의 생성자 내에 정의된 인스턴스 변수(비정적 변수)를 활용하는 것입니다. 이 방법을 사용하면 상위 클래스의 클래스 변수에 영향을 주지 않고 하위 클래스가 고유한 ID를 가질 수 있습니다.
결론
본질적으로 클래스를 재정의하는 직접적인 메커니즘은 없습니다. 자바의 변수. 하위 클래스와 상위 클래스 사이의 관계에는 숨김과 상속이 포함되어 하위 클래스가 상위 클래스의 원래 값을 수정하지 않고도 고유한 특성을 가질 수 있습니다. 고유한 ID가 필요한 경우 인스턴스 변수를 사용하는 것이 더 적합한 솔루션을 제공합니다.
위 내용은 내 Java 하위 클래스가 자체 변수 대신 상위 클래스의 정적 변수를 인쇄하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!