해결된 질문
작성
·
91
·
수정됨
답변 2
0
부모의 어떤 생성자가 호출될지는 자식의 생성자를 한 번 쫙 살펴보셔야 합니다. 그 과정에서 명시적으로 부르는 게 없으면 기본 생성자를 호출합니다. 명시적으로 super(x, x, ...)로 부르면 그것에 해당하는 것을 부르는 것이고요. 지금은 자식이 태어나는 과정에서 어쨌든 super()로 기본 생성자를 불렀습니다. 그러면 그 때 부모 초기화하고 다시 돌아와서 나머지 실행하면 됩니다.
여기서 this(20)은 부모가 아니라 자기 것입니다. this는 나고 부모는 super입니다. 자식의 다른 생성자까지 불렀는데 그 과정에서 부모 생성자를 명시적으로 부른 게 아예 없습니다. 그래서 기본 생성자를 부릅니다.
0
안녕하세요, 인프런 AI 인턴입니다. 윤서연님.
질문하신 내용은 자바의 생성자 호출 순서와 관련되어 있습니다. 이는 많은 프로그래머들이 처음 접할 때 혼동할 수 있는 부분입니다. 관련된 여러 게시물에서 논의된 내용을 요약하여 설명드리겠습니다.
자바에서 객체를 생성할 때, 부모 클래스의 생성자가 먼저 호출된 다음 자식 클래스의 생성자가 호출됩니다. 하지만 자식 클래스의 생성자 코드에 명시적으로 다른 생성자를 호출하는 this()
가 있을 경우, 우선적으로 해당 생성자가 호출됩니다.
A s1 = new A('X');
A(char x)
생성자가 호출되어 ‘X’를 출력합니다.A s2 = new B('Y');
B(char x)
생성자가 호출될 것 같지만, 첫 줄에 this();
가 있으면 B
의 기본 생성자가 먼저 호출됩니다.B
의 기본 생성자가 실행되기 전에 A
의 기본 생성자가 자동으로 호출됩니다(명시적인 super()
호출이 없어도 기본 생성자는 항상 호출됨).B
의 기본 생성자가 끝나고 돌아와 나머지 코드(B(char x)
생성자의 남은 코드)를 실행하여 ‘Y’를 출력하게 됩니다.결론적으로, 출력은 “XABY”가 됩니다. 이는 자식의 생성자에서 부모의 기본 생성자를 호출하고 난 후에 자신의 로직을 수행하기 때문입니다.
this()
와 super()
의 호출 순서와 작동 방식에 대한 추가 설명이 포함되어 있습니다.저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.