강의

멘토링

로드맵

Inflearn brand logo image

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

혁신님의 프로필 이미지
혁신

작성한 질문수

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

java 상속 시 업캐스팅 클래스에 대한 변수 호출 질문

해결된 질문

작성

·

64

·

수정됨

0

안녕하세요,
업캐스팅 메서드 호출에 관해서는 잘 이해하고 있다고 생각하는데

변수 호출에 관해서 질문이 있어서 질문 드립니다.

 

public class Main {
    public static void main(String[] args) {
        Parent p = new Child();
        System.out.print(p.x + " ");
        p.print();
    }
}

class Parent {
    int x = 10;
    void print() {
        System.out.print("Parent ");
    } 
}

class Child extends Parent {
    int x = 20;
    void print() {
        System.out.print("Child ");
    }
}

 

이런식으로 함수가 작성되면
메인함수의 system.out.print(p.x+" ") 실행될 때

p.x 변수 호출에 관한 질문입니다.

child 클래스의 변수 x 값인 20이 호출되지 않고

parent 클래스의 변수 x 값인 10이 호출된다고 하는데 이건 왜 그런가요?

그냥 외워야 하는 java 언어의 기본값인가요?

답변 2

1

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

안녕하세요, 이 부분 정확히 하이딩(hiding)의 챕터에 강좌로 넣어놓은 부분입니다.

업캐스팅일 때는 타입 변수가 Parent입니다. Java에서는 p.x에 접근할 때 객체 타입 아니고 변수 타입(Parent)을 사용해서 변수를 결정합니다.

 

근데 메서드는 실제 객체 타입에 기반해서 바인딩되기 때문에 Child쪽에 있는 것을 실행합니다.

 


 

 

여튼, 외워야할 것은

업캐스팅일 때는 변수는 앞의 타입 쪽에, 메서드는 생성되는 객체(생성자쪽)에 된다고 외우셔야 합니다.

0

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

자바에서 상속을 통해 마주치게 되는 변수와 메서드 호출의 동작 방식은 한 번 혼동될 수 있는 부분입니다. 질문 주신 내용에 대해 설명드리겠습니다.

변수 호출 시의 동작 원리

  1. 업캐스팅(Upcasting)과 변수: Parent p = new Child(); 와 같이 업캐스팅을 통해 객체를 생성하면, 참조 변수 p는 Parent 타입을 따르게 됩니다.

  2. 변수의 그림자(Shadowing): 자바에서는 상속받은 클래스와 하위 클래스에 동일한 변수 이름이 존재할 때, 변수는 메서드와 달리 참조 변수의 타입을 따릅니다. 따라서, p.x는 Parent 유형의 참조 변수인 p의 타입에 따라 부모 클래스의 변수 x를 참조하게 됩니다.

이러한 동작은 자바의 변수에서 나타나는 그림자(shadowing)라는 개념 때문입니다. 변수는 타입에 따라 접근이 결정되며, 런타임 시 실제 객체의 클래스가 아닌 참조 변수의 클래스에 의해 결정됩니다.

메서드 호출 시의 동작 원리

  1. 다형성과 메서드: 반대로 메서드는 오버라이딩을 통해 다형성을 지원합니다. 따라서 자식 클래스에서 같은 이름으로 메서드를 오버라이딩한 경우, 실제 객체 타입에 따른 메서드가 호출됩니다. 즉, p.print()는 Child의 print() 메서드를 호출합니다.

이러한 동작은 자바에서 메서드에 대해서는 런타임에 객체의 실제 클래스에 따라 메서드가 결정되기 때문입니다.

요약

  • 변수: 참조 변수의 타입(Parent)을 따름 -> p.x는 10 출력
  • 메서드: 실제 객체의 클래스(Child)를 따름 -> p.print()에서는 “Child” 출력

이 같은 개념은 자바 프로그래밍의 기초적인 동작 원리 중 하나입니다. 변경되지 않는 규칙이므로, 이를 염두에 두고 코드 작성을 하시면 도움이 될 것입니다.

관련 토론과 예제를 제공하는 링크를 추가로 제공드립니다:
- 자바 상속과 변수의 다형성
- 자바 업캐스팅과 오버라이딩 예제

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

혁신님의 프로필 이미지
혁신

작성한 질문수

질문하기