[java] 상속 계산 순서

Hyunjun Kim·2025년 7월 15일

Java

목록 보기
3/5
public class Main {
    public static void main(String[] args) {
        new Child();
        System.out.println(Parent.total);
    }
}
 
 
class Parent {
    static int total = 0;
    int v = 1;
 
    public Parent() {
        total += (++v);
        show();    
    }
 
    public void show() {
        total += total;
    }
}
 
 
class Child extends Parent {
    int v = 10;
 
    public Child() {
        v += 2;
        total += v++;
        show();
    }
 
    @Override
    public void show() {
        total += total * 2;
    }
}

Child 클래스는 Parent를 상속받았고, 생성자에서 show()를 호출하며, 이 show()는 Child 클래스에서 오버라이드된 메서드다.


필드 및 생성자 정리

Parent 클래스

  • static int total = 0; ← 클래스 전체에서 공유

  • int v = 1; ← 인스턴스 변수, 생성 시 초기화됨

  • 생성자:

total += (++v);  // v=2 → total += 2 → total = 2
show();          // 오버라이딩된 show() 호출됨 → Child.show()

Child 클래스

  • int v = 10; ← Child의 인스턴스 변수 (Parent의 v와는 다른 변수임)
  • 생성자:
v += 2;           // v = 12
total += v++;     // total += 12 → total = 16 → v = 13
show();           // Child의 show() 호출됨

생성 순서

Java는 부모 생성자 → 자식 생성자 순으로 호출되며,
자식 생성자의 필드 초기화는 부모 생성자보다 먼저 수행된다.

단, 자식 필드 초기화는 부모 생성자 호출 전에 이뤄지지만,
오버라이딩된 메서드 호출 시점에는 자식 필드 초기화는 완료되어 있음.


단계별 실행 추적

1. 프로그램 시작

2. Child 객체 생성 → 우선 멤버 변수 초기화

3. Parent 생성자 실행

4. Child 생성자 실행


실행 순서 및 값 변화

단계설명total 값기타
초기화total = 00
Parent 생성자++v → 22Parent.v = 2
Child.show()2 + 2×2 = 66
Child 생성자v = 10 → 12, total += 1218Child.v = 13
Child.show()18 + 18×2 = 5454
profile
Data Analytics Engineer 가 되

0개의 댓글