자식 클래스가 부모 클래스를 상속 받을 때, 부모 클래스의 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 생성자 호출");
}
}