카테고리 없음

[Java] 생성자

happyst 2024. 8. 22. 14:27
자식 클래스의 생성자에서는 반드시 부모 클래스의 생성자를 호출해야한다
  • 자식 클래스가 부모 클래스를 상속 받을 때, 부모 클래스의 field와 method를 포함한 메모리 구조를 초기화 해야되기 때문이다
  • 부모 생성자를 호출하는 방식에는 2가지가 있다
    • 자동 호출: 자식 클래스의 생성자에서 명시적으로 부모 클래스의 생성자를 호출하지 않으면, 자바 컴파일러가 자동으로 부모 클래스의 기본 생성자를 호출하는 것
    • 명시적 호출: 자식 클래스의 생성자에서 super() 키워드를 사용하여 특정 부모 클래스 생성자를 호출하는 것

 

자동 호출

public class Main {
  public static void main(String[] args) {
    Child child = new Child();
  }
}

class Parent {
  public Parent() {
    System.out.println("Parent 생성자 호출");
  }
}

class Child extends Parent {
  public Child() {
    // super(); // 컴파일러가 자동으로 추가
    System.out.println("Child 생성자 호출");
  }
}

  • Child 클래스에서 super()을 명시적으로 호출하지 않았지만, 컴파일러가 자동으로 super()를 삽입하여 부모 클래스의 생성자를 먼저 호출함
  • Parent 클래스에 기본 생성자가 선언되어있지 않으면 오류 발생

 

명시적 호출

public class Main {
  public static void main(String[] args) {
    Child child = new Child();
  }
}

class Parent {
  public Parent(String message) {
    System.out.println("Parent 생성자 호출: " + message);
  }
}

class Child extends Parent {
  public Child() {
    super("Hello from Child"); // 부모 생성자를 명시적으로 호출
    System.out.println("Child 생성자 호출");
  }
}

  • 자식 클래스 생성자에서 super()를 이용하여 부모 클래스의 생성자를 명시적으로 호출함
  • super() 호출은 자식 클래스 생성자의 첫번째 라인에 위치해야 함