강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

dbndus0024님의 프로필 이미지
dbndus0024

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

Hiding (정적 메서드, 멤버 변수) v2

hiding 질문

해결된 질문

작성

·

25

·

수정됨

0

image.png

public string name = "Parent";

public string name = "Child";

이렇게 되어있는데 static이 들어가 있어야 하지 않나요?

또한, 인스턴스 변수일 때 메서드가 아닌 변수도 오버라이딩이 되나요?

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요, 해당 예제 코드는 인스턴스 변수로 만들기 위함이기에 static을 넣으면 안됩니다.

하이딩 챕터의 예제이므로 재정의가 되지 않는 하이딩 예제가 있는 것이 맞습니다.

 

인스턴스 변수는 오버라이딩 되지 않습니다.

각자의 필드 안에서만 이용됩니다.

 

class Parent {
    public String name = "Parent";
}

class Child extends Parent {
    public String name = "Child";  // 오버라이딩 아님! Hiding임
}

public class Main {
    public static void main(String[] args) {
        Parent p = new Child();
        Child c = new Child();
        
        System.out.println("p.name = " + p.name);  // "Parent" 출력!
        System.out.println("c.name = " + c.name);  // "Child" 출력!
    }
}

 

출력값

p.name = Parent
c.name = Child

 

메서드만 오버라이딩(재정의) 됩니다.

0

안녕하세요, 인프런 AI 인턴입니다. dbndus0024님.

자바의 변수 하이딩에 관해 질문해 주셔서 감사합니다. 이번 기회를 통해 상속과 변수 하이딩에 대해 안내드리고자 합니다.

자바에서의 변수 하이딩

  1. 변수 하이딩(variable hiding): 자식 클래스에 부모 클래스와 동일한 이름의 변수가 존재할 때, 자식 클래스의 변수가 부모 클래스의 변수를 가립니다. 이 경우, 자식 클래스 인스턴스에서는 부모의 변수가 아닌 자식의 변수가 참조됩니다.

  2. Static 변수와 그렇지 않은 변수:

    • Static으로 지정되면 클래스와 함께 메모리상에 고정되지만, 현재 논의되고 있는 변수들은 인스턴스 변수입니다. Static 지정 여부와는 무관하게, 변수가 객체에 따라 다르게 활용될 수 있습니다.
    • 인스턴스 변수였기 때문에, 업캐스팅 시 참조하고 있는 객체가 아닌 참조 변수의 타입에 의존적일 수 있음을 알 수 있습니다.

실행 결과

다음은 두 instance를 통해 어떻게 변수들이 나타나는지를 보여줍니다:
- Parent p = new Child();로 선언될 경우, p.name은 “Parent”를 출력합니다. 참조 유형이 Parent이기 때문에 부모의 변수를 참조합니다.
- Child c = new Child();로 선언될 경우, c.name은 “Child”를 출력합니다. 참조 유형이 Child이기 때문에 자식의 변수를 참조합니다.

Linked 관련 질문을 통해 이 내용을 더욱 깊이 이해하실 수 있습니다:
- 맴버변수의 하이딩..
- 하이딩 질문

이해하는 데 도움이 되었기를 바랍니다! 객체 지향의 다른 개념에 대한 추가적인 질문이 있다면, 언제든지 말씀해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dbndus0024님의 프로필 이미지
dbndus0024

작성한 질문수

질문하기