Cộng đồng Hỏi & Đáp của Inflearn
hiding 질문
Đã giải quyết
Viết
·
27
0
하이딩과 static, 상속 관련해서 질문이 있습니다.
일반적인 상속 상황을 가정할 때
부모, 자식에게 둘 다 있는 메서드(즉, 오버라이딩): 자식꺼 사용
부모, 자식에게 둘 다 있는 static 메서드: 부모꺼 사용
부모, 자식에게 둘 다 있는 변수: 객체의 자료형(Parent p = new Child();의 경우 Parent의 변수 사용, Child c = mew Child();의 경우 Child의 변수 사용)에 맞는 변수 사용
이 맞을까요?
Câu trả lời 2
0
안녕하세요, 주말에 학습하시느라 고생이 많으십니다.
부분적으로 맞기도 한데 어떤 것은 좀 애매하게 말씀하셔서 약간 수정해서 말씀드립니다.
1번의 경우 말씀하시는 것이 맞습니다. 특별히 정정해드릴 부분이 없네요.
2번이 문제인데, 이 경우에는 정확히 말하자면 "선언된 타입"을 따라가는 것이 맞습니다.
물론 우리는 항상 Parent로 선언하니까 표면적으로는 말씀하시는 것이 맞으나,
혹시 문제에서 더 상위 체인인 클래스로 GrandParent가 나오면... 답 없죠.
선언된 타입을 따라가셔야 합니다.
Parent p = new Child();
p.staticMethod(); // → Parent의 static 메서드
Child c = new Child();
c.staticMethod(); // → Child의 static 메서드
3번은 가까운 변수를 쓰는 것이 맞으나, 외부에서 변수가 오는 경우에는 this. 혹은 super.가 붙어있는지 잘 보셔야 합니다.
명시적으로 부모의 변수나 현재 객체의 인스턴스 변수를 사용하기 때문에 그렇습니다.
단순히 변수의 필드 하이딩을 말씀하시는 것이면 맞습니다.
Parent p = new Child(); // → Parent의 변수
Child c = new Child(); // → Child의 변수
변수는 넘어가지 않고, 그대로 하이딩합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 준상님.
자바에서 상속과 관련된 하이딩(hiding) 및 오버라이딩(overriding)에 대한 질문을 주셨네요. 먼저 각 상황에 대한 설명과 함께 답을 드리겠습니다.
1. 부모, 자식에게 둘 다 있는 메서드(오버라이딩)
오버라이딩 된 메서드의 경우, 실제 객체의 클래스에 따라 메서드가 결정됩니다. 따라서 Parent p = new Child();의 경우, 자식 클래스의 오버라이딩 된 메서드가 호출됩니다. 이는 자바의 다형성(polymorphism) 때문입니다.
2. 부모, 자식에게 둘 다 있는 static 메서드
Static 메서드는 클래스 레벨에서 호출되며, 객체 인스턴스가 아닌 클래스 타입으로 결정됩니다. 따라서 Parent p = new Child();의 경우 부모 클래스의 static 메서드가 호출됩니다. 이는 오버라이딩이 아닌 하이딩(hiding)에 해당합니다.
3. 부모, 자식에게 둘 다 있는 변수
변수의 경우, 참조 변수의 선언된 타입에 따라 사용됩니다. 따라서 Parent p = new Child();로 사용하면 부모 클래스의 변수가, Child c = new Child();로 사용하면 자식 클래스의 변수가 호출됩니다.
위의 설명을 기반으로 이해에 도움될 수 있는 추가 링크입니다:
- 자바 상속과 메소드 오버라이딩 이해하기
- 자바에서 메소드와 변수 하이딩 차이점
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




