📝 super 키워드
super
- 멤버변수와 지역변수의 이름이 같을 때 this를 붙여서 구별했듯이
부모 클래스와 자식 클래스의 멤버변수 이름이 같은 때 super를 붙여서 구별한다.
super()
- 부모 클래스의 생성자이다.
즉, super()는 부모의 생성자를 호출하는데 사용된다.
📝 상속 관계에서의 생성자
- 생성자는 상속되지 않는다.
- 하지만 생성자가 정의된 클래스는 객체 생성을 위해서 생성자 파라미터를 반드시
전달받아야 하기 때문에,
파라미터를 갖는 생성자가 정의된 클래스를 상속 받게 되면 에러가 발생된다.
부모 생성자 강제 호출
- 생성자가 정의된 클래스를 상속받는 경우에는 자식 클래스의 생성자를 통해서
부모 생성자를 강제로 호출해야 한다.
- 부모의 생성자를 호출하는 방법은 super() 키워드를 메서드 이름으로
사용하는 것이다.
class Parent {
public Parent(String str) {
System.out.println("부모 생성자 호출 : " + str);
}
}
class Child extends Parent {
public Child(String str) {
super(str);
System.out.println("자식 생성자 호출");
}
}
public class Main {
public static void main(String[] args) {
Child c = new Child("부모 생성자");
}
}
👉 실행 결과
부모 생성자 호출 : 부모 생성자
자식 생성자 호출
📙 생성자 정리
- 부모 클래스의 생성자는 상속되지 않고, 자식 클래스로 객체를 생성할 때
자동적으로 부모의 기본 생성자로 호출
- 부모 생성자가 매개변수를 갖고 있다면 자식 클래스를 객체화 할 때 자동으로
호출되지 않는다.
- 따라서 자식 생성자에서 명시적으로 부모 생성자를 호출해야 한다.
- 이때 사용되는 키워드가 super()이다.
🔥 super()를 사용할 때 자식 생성자의 첫 줄에 위치해야 한다. 🔥