해결된 질문
작성
·
46
0
22분에 나오는 코드의 실행 순서에 질문이 있습니다.
자식 클래스 생성자에 this나 super로 생성자가 적혀있지 않은 경우 자바에서 자동으로 super()를 만들어준다고 알고 있는데 맞나요? 그럼 Chi()에서 this(20)으로 Chi(20)이 실행된 다음, 이 생성자에는 따로 this나 super로 생성자가 적혀있지 않기 때문에 super()로 Par() 생성자가 호출된다고 이해하면 될까요?
질문을 정리하자면, 코드의 정확한 실행 순서가
Chi() -> Chi(int y) -> Par()인지,
Chi() -> Par() -> Chi(int y)인지 알고 싶습니다.
답변 2
0
"실행순서" 는 무조건 부모의 생성자부터입니다.
다만 사람이 코드를 따라가며 읽을 때는 Chi() -> Chi(int y) -> Par() 이렇게 보는 게 맞습니다.
this()와 super()는 두 줄을 동시에 작성할 수 없어서 다음 체이닝으로 흘러간 다음에 그곳에서 this()가 없을 때 자동으로 super()를 넣어줍니다.
실행순서는 출력값이 찍히는 순서이기 때문에 저게 아니라 역방향인 것을 주의해주세요.
그 때는 명확하게 super가 찍혀 있었습니다. 논란이 있는 문제는 안나옵니다. 나와도 전원 정답처리하죠.
정확히 말하면 제가 말씀드렸듯이 this 체이닝을 다 훑고 부모로 가서 역방향으로 오는 것이 맞습니다.
실행순서는 역방향을 적어야죠.
역방향으로 부모부터 실행됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. rlaco님.
자바에서의 생성자 호출 순서는 많은 학습자분들이 헷갈려하는 부분 중 하나죠. 질문하신 내용과 관련해서 간단히 설명드릴게요.
자바에서는 자식 클래스의 생성자가 호출되면, 명시적으로 부모 클래스의 생성자를 호출하지 않더라도 자동으로 기본 생성자인 super()
가 추가됩니다. 따라서, 명시적으로 호출하지 않아도 부모 클래스의 생성자가 항상 먼저 실행됩니다.
질문하신 코드가 Chi() -> Chi(int y) -> Par()
인지, 아니면 Chi() -> Par() -> Chi(int y)
인지에 대해 설명드리겠습니다.
Chi() 생성자:
this(20)
을 통해 Chi(int y)
생성자가 먼저 호출됩니다.Chi(int y) 생성자:
super()
가 호출되어 Par()
생성자가 실행됩니다.따라서, 코드의 실행 순서는 Chi() -> Chi(int y) -> Par()
가 됩니다.
자세한 이해를 돕기 위해 비슷한 질문에 대한 링크 몇 가지를 제공해드립니다:
해당 답변들이 rlaco님의 이해에 도움이 되셨기를 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
그런데 2024년 1회 기출문제에 나오는 자바 실행순서 문제처럼 나오면 자식 생성자부터 실행한다고 답을 적어야 하지 않나요?