카테고리 없음
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. 자식 함수 사용 시, 자식 함수는 자신의 변수를 이용한다