상속을 활용한 생성자 호출

2024. 11. 28. 14:37정보처리,전산/JAVA

반응형
// 클래스 A: 최상위 클래스
class A {
    // 기본 생성자: 호출되면 "10" 출력
    A() {
        System.out.println(10);
    }
}

// 클래스 B: A를 상속받음
class B extends A {
    // 매개변수 있는 생성자
    B(int a) {
        super(); // 부모 클래스 A의 생성자를 명시적으로 호출
        System.out.println(a); // 전달받은 매개변수 a 출력
    }
}

// 클래스 C: B를 상속받음
class C extends B {
    // 매개변수 있는 생성자
    C(int a) {
        super(a * 10); // 부모 클래스 B의 생성자를 호출하면서 a * 10 값을 전달
        System.out.println(a); // 전달받은 매개변수 a 출력
    }
}

// 테스트 클래스
public class Test {
    public static void main(String args[]) {
        // C 클래스 객체 생성 (업캐스팅: C -> A)
        A b = new C(1000);
    }
}

주요 로직과 실행 순서

  1. A b = new C(1000);
    • C 클래스의 객체를 생성한다.
    • C 클래스의 생성자가 호출되면서 상속 구조에 따라 상위 클래스 생성자가 호출된다.
  2. 호출 흐름:
    • C(int a):
      • super(a * 10) 호출 → B(int a) 실행
    • B(int a):
      • super() 호출 → A() 실행
    • A():
      • System.out.println(10); 출력
    • 이후 각 생성자의 로직이 실행된다.

 

코드 분석

  1. class A:
    • 기본 생성자 A()를 가지고 있으며, 호출 시 System.out.println(10);을 실행한다.
  2. class B extends A:
    • B 클래스는 A 클래스를 상속받는다.
    • B(int a) 생성자는 super();를 통해 부모 클래스 A의 생성자를 호출한 후, 인자로 받은 a 값을 출력한다.
      • class C extends B:
    • C 클래스는 B 클래스를 상속받다.
    • C(int a) 생성자는 super(a * 10);을 통해 부모 클래스 B의 생성자를 호출한 후, 인자로 받은 a 값을 출력한다.
  3. public class Test:
    • main 메서드에서 C(1000)을 호출하여 C 클래스의 객체를 생성한다.
    • A b = new C(1000);로 선언되었기 때문에 업캐스팅(부모 타입 참조) 형태로 객체를 생성한다.

 

 

  • C(1000) 호출 → super(a * 10)로 B(10000) 호출
  • B(10000) 호출 → super()로 A() 호출
  • A() 실행 → System.out.println(10);
  • B(10000) 실행 → System.out.println(10000);
  • C(1000) 실행 → System.out.println(1000);

 

반응형