클래스, 오버라이딩

moon.kick·2025년 2월 24일


코드 실행 흐름 분석

클래스 계층 구조

  • Parent 클래스에는 세 개의 생성자가 존재합니다.
    • Parent(int i) { System.out.println(2); }
    • Parent(String s) { System.out.println(3); }
  • Child 클래스는 Parent 클래스를 상속받으며, 세 개의 생성자를 가집니다.
    • Child()this(3) 호출 → Child(int i) 호출 → super(i) 호출 → Parent(int i) 실행 → System.out.println(5) 실행 → System.out.println(4) 실행
    • Child(int i)super(i) 호출 → Parent(int i) 실행 → System.out.println(5) 실행
    • Child(boolean b)super("안녕") 호출 → Parent(String s) 실행 → System.out.println(6) 실행

실행 결과 예상

new Child(); 
  • Child() 생성자 호출
  • this(3) 실행 → Child(int i) 생성자 호출
  • Child(int i) 생성자에서 super(i); 실행 → Parent(int i) 실행 → 2 출력
  • Child(int i) 내부에서 System.out.println(5); 실행 → 5 출력
  • Child() 내부에서 System.out.println(4); 실행 → 4 출력

최종 결과

2
5
4

정리

  1. this()는 같은 클래스 내의 다른 생성자를 호출하는 역할을 한다.
  2. super()는 부모 클래스의 생성자를 호출하는 역할을 한다.
  3. 생성자의 첫 줄에는 반드시 super() 또는 this()가 있어야 한다. 없으면 컴파일러가 자동으로 super()를 삽입한다.
  4. 부모 클래스에 기본 생성자가 없으면, 자식 클래스에서 명시적으로 부모 생성자를 호출해야 한다.
  5. 부모 클래스의 기본 생성자가 없을 경우, 자식 생성자에서 반드시 부모의 특정 생성자를 호출해야 한다. (super(값))

이해가 잘 되셨나요? 더 궁금한 부분이 있으면 질문 주세요! 😃

profile
@mgkick

0개의 댓글