사진 출처 : https://namu.wiki/w/Git
> class가 인스턴스화 될 때 생성자가 실행되면서 객체의 초기화를 한다. 그 때 생성자 자신만 실행되는 것이 아닌 부모의 생성자로 부터 시작된다.
public class JavaExam {
public static void main(String[] args) {
Truck t = new Truck();
}
}
public class Car {
// 파일 필드명
Car(String s) {
System.out.println("Car의 기본 생성자입니다.");
}
}
public class Truck extends Car {
Truck() {
super("program");
System.out.println("트럭의 기본 생성자입니다.");
}
}
위의 코드들을 보면 Truck 클래스는 Car클래스를 상속받는다. Truck 클래스에서 super()은 부모 생성자를 의미하는데, 부모의 생성자를 임의로 호출하지 않으면, 부모 기본 class 생성자가 자동으로 생성된다.
그럼 super은 왜 필요할까?
Car클래스는 기본 생성자가 매개변수를 필요로 하고 있다. 만약 Truck 클래스에서 super(); 만 호출하게 되면 에러가 날 것이다. 부모 생성자는 매개변수로만 받기에 기본 생성자가 없다. 그래서 super(매개변수) 해줌으로써 부모 생성자를 호출해야 한다.
public class Car {
// 파일 필드명
Car(String s) {
System.out.println("Car의 기본 생성자입니다.");
}
Car() {
System.out.println("매개변수 없는 생성자 입니다.");
}
}
public class Truck extends Car {
Truck() {
System.out.println("트럭의 기본 생성자입니다.");
}
}
이번엔 super()이 없고 Car클래스에 기본 생성자가 선언됐다고 해보자. super()가 필요할까? 아니다.
부모 생성자에 기본 생성자가 있기에 자식이 상속 받기만 한다면 기본적으로 부모 생성자가 호출된다.