모의고사 1 회 2번문제 중
모의고사 1회 2번문제
Parent 생성자 4행 get()호출시
부모인자2 받은것처럼 자식도 5를 받아야 하는거
아니에요?
보통 이러면 나중에 받았다고 생각하고 답지처럼
푸는게 정석인가요?
비전공자라 너무 헛갈리네요
답변 2
1
안녕하세요, 좋은 질문입니다. 결론부터 말씀드리면 답지 풀이(2 14)가 맞습니다. 나중에 받았다고 가정하고 푸는 요령이 있는 것은 아니고, 자바가 실제로 그 순서대로 실행하기 때문에 답이 그렇게 나옵니다.
new Child()를 하면 자바는 부모 쪽을 먼저 전부 만들고, 그다음에 자식 쪽을 만듭니다. 순서대로 따라가 보겠습니다.
1) 객체가 처음 만들어질 때 숫자 필드는 부모 x, 자식 x 모두 기본값 0으로 시작합니다.
2) 부모 필드 초기화 int x = 2가 실행됩니다. (부모 x = 2, 자식 x = 0)
3) 부모 생성자 본문이 실행되면서 get()이 호출됩니다. (질문하신 4행)
4) 부모 생성자의 x += 3이 실행됩니다. (부모 x = 5)
5) 이제서야 자식 필드 초기화 int x = 5가 실행됩니다. (자식 x = 5)
6) 자식 생성자 본문 x += 4가 실행됩니다. (자식 x = 9)
7) 자식 생성자에서 get()이 다시 호출됩니다.
3)번 시점에 부모 x는 2)번을 지났기 때문에 2입니다. 하지만 자식 x가 5가 되는 것은 5)번이라서, 이 시점의 자식 x는 기본값 0 그대로입니다. 부모가 2를 받았으니 자식도 5를 받았을 거라고 생각하기 쉬운데, 부모와 자식은 초기화 시점이 다릅니다. 부모가 생성자까지 모두 실행한 뒤에야 자식 차례가 옵니다.
부모 생성자 안에서 get()을 불렀는데 Child의 get()이 실행되는 이유는, 지금 만들어지고 있는 객체가 Child이기 때문입니다. 자바는 메서드를 호출할 때 실제 객체가 오버라이딩한 메서드를 실행하고, 생성자 안에서도 마찬가지입니다.
그래서 출력은 다음과 같습니다.
3)번 시점: Child.get() = 자식 x + 부모 x = 0 + 2 = 2
7)번 시점: Child.get() = 9 + 5 = 14
답: 2 14
시험용으로는 "부모 필드 → 부모 생성자 → 자식 필드 → 자식 생성자, 메서드는 실제 객체(자식)의 것이 불린다"로 외워 두시면 됩니다. 부모 생성자 안에서 자식 메서드가 불리고 그 메서드가 자식 필드를 쓰면, 그 필드는 아직 0입니다(문자열이면 null). 실기에 자주 나오는 유형이니 이 문제를 직접 한 번 더 따라가 보시길 권합니다.
응원합니다.
0
안녕하세요, 인프런 AI 인턴입니다. iamowl99님.
질문에 나온 코드 전체가 없어 정확한 출력값까지 단정하기는 어렵지만, 부모 생성자에 전달된 인자값이 자식 생성자까지 자동으로 전달되는 것은 아닙니다.
Parent(int x)의x는 부모 생성자 안에서 사용하는 값입니다.
- 자식 생성자에서 별도의 값을 사용하려면
Child(int x)처럼 자식 생성자에도 인자를 전달해야 합니다.
- 부모 생성자를 명시적으로 호출하는
super(값)이 있다면 그 값이 부모 생성자로 전달됩니다.
- 반대로
this(값)은 부모가 아니라 같은 클래스의 다른 생성자를 호출합니다.
- 부모 생성자에서
get()같은 오버라이딩된 인스턴스 메서드를 호출하면, 실제 객체가 자식 객체인 경우 자식의 메서드가 호출될 수 있습니다. 다만 부모 생성자 실행 시점에는 자식 필드가 아직 초기화되기 전이므로 기본값이 사용될 수 있어 주의해야 합니다.
생성자 호출 순서는 아래 질문의 설명처럼, 자식 생성자 실행 전에 부모 생성자가 먼저 실행되며 this()와 super()가 서로 다른 역할을 합니다.
자식이 태어나면 부모를 호출한다??
this()는 자식 클래스의 다른 생성자를 호출하고, 부모 생성자는super()를 통해 호출한다는 내용을 확인할 수 있습니다.9번 문제 질문있습니다. 19:14
this(7000)을 사용하더라도 최종적으로 부모 생성자는 반드시 한 번 호출된다는 점을 설명합니다.JAVA언어 기출문제의 변형
Child obj = new Child(),Parent obj = new Child()모두 부모 생성자가 먼저 호출되는 원리를 설명합니다.
따라서 답지처럼 풀이하는 것이 맞는지는 해당 생성자 내부의 this(), super(), get() 구현과 필드 선언을 순서대로 확인해야 합니다. 특히 “부모가 5를 받았으니 자식도 5를 받는다”라고 생각하기보다는, 각 생성자에 실제로 어떤 값이 전달되는지와 메서드가 어느 클래스에서 실행되는지를 나누어 보시면 됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
정처기 2026-3 실기 문의
0
120
2
정처기 실기 3회 컴싸 사용 여부
0
82
1
26-2 이론문제 재탕
1
65
1
26-2년도 코드문제
0
42
0
26-2 코드문제
0
52
1
15분 48초 질문
0
75
2
26-1년도 이론문제 재탕
0
77
1
26-1년도 코드문제 재탕
0
55
0
이론재탕만 눈치챘어도
0
88
1
25-3년도 이론문제 재탕
0
67
1
25-3년도 코드문제 재탕
0
53
0
출력값 문의
0
67
2
25-2 분기커버리지
0
57
0
25-2 이론 재탕
0
76
1
25-1 이론 재탕
0
63
1
서브넷 마스크
0
66
2
모의고사 1회 계산문제 2개 맞았는데
0
82
2
업캐스팅 문제 예시 4번 부모 호출
0
68
2
모의고사 자료 해설이 너무 불친절하네요.
0
104
2
부모의 생성자 출력 관련
0
63
2
24-3 이론파트 재탕문제
0
67
0
누락코드
0
64
1
다차원 배열 포인터 질문있습니다
0
91
3
24-2 이론 파트 재탕
1
83
1





