인프런 커뮤니티 질문&답변
31분 50초 JAVA 문제
해결된 질문
작성
·
43
0
안녕하세요
31분 50초
Child() 함수에 this(5000) 이 있는데 부모를 호출 할 수 있나요?
저는
super, this 아무것도 없을때 명시적으로 super 는 없지만 자동으로 부모를 호출한다
super 가 있으면 부모를 호출한다.
super, this 는 함께 못 쓰인다.
이렇게 알고 있어서, 문제를 풀 때
super 가 명시적으로 없어도 항상 숨어있다고 생각하고 접근했습니다.
그래서 Child() 생성자에 this 가 있으면 super 는 실행되지 않는다고 생각해서
부모 생성자 호출 과정을 제외하고 풀었는데, 결과가 다르게 나와서 헷갈렸습니다
this 가 있는데도 부모 호출이 맞는지 궁금합니다.
그리고 부모를 호출한다면 child() -> parent() -> parent(int x) -> child(int x) 순서가 맞는지도 알려주세요
퀴즈
자바 상속에서 자식 객체 생성 시 생성자 호출 순서의 첫 단계는 무엇일까요?
자식 클래스 생성자 코드 실행
부모 클래스의 기본 생성자 호출
자식 클래스 메소드 호출
정적 초기화 블록 실행
답변 2
0
안녕하세요!
부모는 언제든지 가장 마지막에 암묵적으로라도 호출됩니다.
이 경우에는 Java 컴파일러가 this.x = x; 위에 super()를 삽입해줍니다.
생성자 체인은 우리가 C언어에서 여러 개의 함수를 순서대로 호출하듯이,
역으로도 실행순서가 순서대로 내려와야합니다. 그래야 제대로 출력이 될테니까요.
그래서 순서는
Child() -> Child(int x) -> 그 안에서 super() -> super의 this(500)이 호출되는 형식입니다.
특히 저 super()는 보이지는 않지만 Java가 삽입해주는 것입니다.
생성자 체인 끝에서 무조건 부모를 한 번은 호출해야합니다.
부모 필드가 초기화되지 않으면 자식은 태어날 수 없습니다.
일단 저렇게 호출은 됐고, 실행은 그 반대 순서대로 됩니다.
좋은 질문 감사드립니다.
0
안녕하세요, 인프런 AI 인턴입니다. whks님.
자바에서의 생성자 호출 순서는 복잡할 수 있지만, 클래스 상속 구조에서의 기본적인 규칙 몇 가지를 이해하시면 명확해집니다. 질문하신 부분을 하나하나 설명드리겠습니다.
생성자 호출 순서 및 규칙
자동적으로 부모 생성자 호출:
- 자바에서는 자식 클래스의 생성자가 호출될 때, 명시적으로
super()를 추가하지 않더라도 부모 클래스의 기본 생성자를 자동으로 호출합니다. 이는 컴파일러가super();를 암묵적으로 추가하기 때문입니다.
- 자바에서는 자식 클래스의 생성자가 호출될 때, 명시적으로
super()와this()호출:- 하나의 생성자 내에서는
super()와this()중 하나만 사용할 수 있습니다. 즉, 두 키워드를 같은 생성자 안에서 동시에 사용할 수 없습니다.
this(5000)이 자식 클래스의 생성자에서 사용되면, 같은 클래스의 다른 생성자를 호출하는 것을 의미합니다. 따라서 그 생성자가 어떤 방식으로 부모 생성자를 호출하는지에 따라 부모 생성자 호출 여부와 호출 시점이 달라집니다.
- 하나의 생성자 내에서는
호출 순서:
- 자식 생성자에서
this(arguments)로 다른 생성자를 호출한다면, 여전히 부모의 생성자를 호출할 기회가 있습니다. 이 다른 생성자가 첫 번째 줄에서super()를 호출하거나 기본 생성자를 호출한다면 결국 부모 생성자가 호출됩니다.
- 자식 생성자에서
상황 예시
- 만약
Child()생성자에서this(5000)을 사용하고, 그 외Child클래스의 다른 생성자에서 부모의 생성자 호출을 명시적으로 다루고 있다면 부모 생성자는 호출됩니다.
- 일반적으로 생성자의 호출 순서는:
Child() -> Child(int x) -> Parent() -> Parent(int x)와 같이 진행될 수 있습니다.
추가적인 이해를 돕기 위한 참고 링크를 제공해 드립니다:
저는 질문자님의 이해를 돕고자 지식공유자의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




