EEALL@ONCE

😫 super는 왜 super인가 왜 생성자에서 제일 먼저 언급해줘야하나! 본문

오늘의 에러😫

😫 super는 왜 super인가 왜 생성자에서 제일 먼저 언급해줘야하나!

올엣원스 2023. 11. 20. 21:44
728x90

지금 super를 제일 먼저 안써줬다고 에러가 나는 상황... 

 `super` 키워드는 생성자 내에서 제일 먼저 호출되어야 합니다. 생성자의 첫 줄에서 `super`를 호출하지 않으면 자동으로 기본 생성자(`super()`를 호출하는 생성자)가 호출되는데, 이는 부모 클래스의 생성자를 호출하는 것입니다.


package abstractPart;

public class Button extends FormElement {
    private String print;

    public Button(int space, String print) {
        super(space); // FormElement의 생성자를 먼저 호출
        this.print = print;
    }

    @Override
    void func() {
        // func 메서드의 내용을 추가하세요
    }
}

 

자바에서 하위 클래스의 생성자가 호출될 때, 해당 클래스의 생성자 내에서는 반드시 상위 클래스(부모 클래스)의 생성자를 먼저 호출해야 합니다. 이는 상속 구조에서 객체가 초기화되는 순서를 유지하기 위함입니다.

자바에서 객체 생성 시 아래와 같은 규칙이 적용됩니다:

  1. 하위 클래스의 생성자가 호출되면, 먼저 해당 클래스의 생성자 코드가 실행됩니다.
  2. 생성자 코드에서 super()를 통해 상위 클래스의 생성자를 명시적으로 호출할 수 있습니다.
  3. 만약 하위 클래스에서 super()를 호출하지 않으면, 자동으로 상위 클래스의 기본 생성자가 호출됩니다.

만약 상위 클래스에 매개변수가 있는 생성자가 있다면, 하위 클래스의 생성자에서는 super()를 사용하여 해당 생성자에 필요한 인자를 전달해주어야 합니다. 이렇게 함으로써 상위 클래스의 필요한 초기화 작업이 먼저 이루어지게 됩니다.

이 규칙을 따르지 않으면 컴파일 오류가 발생하게 됩니다. 따라서 super()는 생성자의 첫 줄에 위치해야 합니다.

 

728x90