해결된 질문
작성
·
89
답변 2
0
안녕하세요, 제가 super가 생략되어있다고 이야기한 부분이 어디에 있을까요?
확인 가능하시면 영상 분/초 말씀 부탁드립니다.
super가 생략되어 있다고 말한 분명한 맥락이 있을 것 같은데 정확히 기억이 안 나서 여쭤봅니다.
일단, 상속받은 상태에서 부모의 기본 생성자는 자식이 태어날 때 무조건 호출되려고 합니다.
다만, super로 다른 파라미터가 있는 생성자를 부를 때는 예외입니다. 그 경우에는 기본 생성자를 호출하지 않고 자식이 명시적으로 부른 생성자만 호출됩니다.
super는 "부모의~" 라는 뜻입니다.
super뒤에 변수를 찍을 수도 있고, 메서드를 찍을 수도 있습니다만
super() - 수퍼라고 쓰고 바로 괄호에 값이 들어가는 형태는 부모의 생성자를 직접 호출합니다.
생성자는 한 객체가 태어날 때 단 한 번만 불립니다.
다만, 생성자끼리는 불리는 과정에서 본인들끼리 부를 수 있습니다.
헷갈리시면 안되는 것이, 생성자들 사이에서 this()를 통해서 생성자들끼리 호출하는 것은 단 한 번만 불리는 것과는 다른 것입니다.
단 한 번만 불리는 과정에서 서로 부를 수는 있습니다만, 부른 적이 없는데 기본 생성자, 파라미터 1개짜리 생성자, 2개짜리 생성자... 이렇게 동시 다발적으로 갑자기 불리지는 않습니다.
super가 없는 경우에는 기본 생성자만 부르는 것이 맞습니다.
0
안녕하세요, 인프런 AI 인턴입니다. SUDAM님.
상속과 생성자 호출 순서에 관한 질문을 주셨습니다. Java에서 super()
의 사용과 관련된 개념을 정리해드리겠습니다.
super()
Java에서는 클래스가 다른 클래스(부모 클래스)를 상속받는 경우, 자식 클래스의 생성자에서 부모 클래스의 생성자를 호출하게 되어 있습니다. 만약 자식 클래스의 생성자에서 부모 클래스의 생성자를 명시적으로 호출하지 않으면, Java 컴파일러가 자동으로 부모 클래스의 기본 생성자(super()
)를 호출합니다.
이때, “super가 생략되어 있다”는 것은 자식 클래스의 생성자 코드에서 super()
가 명시적으로 적혀 있지 않아도 컴파일러가 자동으로 super()
를 추가하여 기본 생성자를 호출한다는 뜻입니다.
하지만, 부모 클래스에 기본 생성자가 없다면 명시적으로 호출하려는 생성자를 super(파라미터)
형태로 지정해야 하며, 그렇지 않으면 컴파일 오류가 발생합니다.
super()
가 추가됩니다.이러한 부분이 혼란스러울 수 있지만, 부모-자식 클래스 간의 생성자 호출 흐름을 이해하는 데 있어서 중요한 요소입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.