카테고리 없음

Java의 업캐스팅 시, 함수와 변수

kangchaewon 2025. 7. 6. 16:54

업캐스팅 시, 변수, 함수 동작

메서드 재정의(오버라이딩)된 자식 클래스 메서드가 호출됨 (동적 바인딩)
 변수 참조 타입(부모)의 변수가 사용됨 (정적 바인딩)

 

Parent p = new Child(); // 자동 형변환 (Upcasting)

 

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

class Child extends Parent {
    int x = 20;
    @Override
    void show() {
        System.out.println("Child show");
    }
    void onlyInChild() {
        System.out.println("Only in child");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent p = new Child();  // 업캐스팅
        System.out.println(p.x); // 👉 출력: 10 (변수는 부모 기준)
        p.show();                // 👉 출력: Child show (메서드는 자식 기준)

        // p.onlyInChild();     // ❌ 오류! 부모 타입에 없는 메서드
    }
}

 

자식 클래스에서 재정의하게되면, 메소드는 자식의 메소드를 따르게된다(업캐스팅을 해도)

반면, 변수의 경우 업캐스팅된 객체는 부모 변수를 따르게된다.

 

이유는 바인딩 시점이 다르기 때문이다.

요소바인딩 시점기준

변수 컴파일 시점 참조 타입(Parent) 기준
메서드 런타임 시점 실제 객체(Child) 기준

 

바인딩 종류시점예시기준

정적 바인딩 (Static Binding) 컴파일 시간 변수, static 메서드 참조 타입 기준
동적 바인딩 (Dynamic Binding) 런타임 인스턴스 메서드 (오버라이딩된 것) 객체의 실제 타입 기준

 

=> 

결론

업캐스팅을 했을때,

1. 자식 클래스가 변수, 함수 재정의 했을 경우

1-1. 변수는 각자 가지고

1-2. 함수는 자식 것을 사용하게 된다

1-3. 자식 함수 사용 시, 자식 함수는 자신의 변수를 이용한다