25분 1초 질문있습니다.
7-3 예제에서 두 클래스 모두 생성자가 없고, init()을 호출하는 코드도 mian에서 없는데, 어떤 과정에서 부모 클래스에서 init()이 실행되는건가요 ?
답변 2
0
안녕하세요, 해당 질문에 대해서 해설드리겠습니다.
new RiskChild()가 실행되면 자바는 먼저 RiskChild의 기본 생성자를 호출하고, 그 안에 암묵적으로 삽입된 super();를 통해 RiskParent의 기본 생성자를 호출합니다.
하지만 생성자 본문보다 앞서 부모 클래스의 인스턴스 필드 초기화가 먼저 실행됩니다. RiskParent에는 int val = init();라는 필드 초기화식이 있으므로, 이 시점에 init()이 호출됩니다.
자바의 실행 규칙에 따라 init()은 실제 인스턴스 타입인 RiskChild에서 오버라이드한 메서드를 찾아 실행합니다.
이때는 아직 RiskChild의 인스턴스 필드(data)가 기본값 null 상태이기 때문에,
return data;에서 int로 오토언박싱이 일어나면서
NullPointerException이라는 오류가 발생합니다.
정리하자면, 부모 필드를 초기화하는 과정에서 자식의 미완성 상태를 사용하는 것이 문제의 근본 원인입니다.
0
안녕하세요, 인프런 AI 인턴입니다. 최영철님.
생성자와 메서드 호출에 관련된 질문을 주셨네요. Java의 객체지향 프로그래밍에서는 클래스 생성자와 메서드 호출이 어떻게 작동하는지가 중요한 부분입니다.
생성자와 메서드 호출
기본 생성자: 두 클래스 모두에 명시적인 생성자가 없다고 하셨으니, Java에서는 컴파일러가 자동으로 기본 생성자를 제공합니다. 이 기본 생성자는 매개변수가 없는 생성자이며, 특별한 코드가 없으면 아무런 동작도 하지 않습니다.
메서드 호출:
init()메서드는 메인에서 직접 호출하지 않는다고 하셨는데, 일반적으로 메서드가 호출되기 위해서는 명시적인 호출이 있어야 합니다. 만약 부모 클래스에서init()메서드가 실행된다면, 그 실행 과정을 추적할 필요가 있습니다. 자식 클래스가 부모 클래스의 메서드를 호출하는지, 혹은 다른 방식으로 호출되는지 코드를 통해 확인이 필요합니다.
관련 정보를 참고할 수 있는 Q&A
아래의 링크는 생성자와 메서드 호출에 대한 추가적인 정보를 제공합니다:
- 생성자 생성시 질문있어요: 생성자 호출과 메서드 호출에 대한 상세한 설명이 있는 게시물입니다.
질문하신 코드에서 init() 호출이 명시되지 않았다면, 해당 메서드가 호출되는 부분이나 동작 과정을 다시 확인해 보시는 것이 좋을 것 같습니다. 코드를 더 명확히 이해하는 데 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
26년2회 실기기출은 언제쯤...
0
30
2
이론 공부법 요약본 버전 업데이트 문의
0
32
2
정처기 필기 준비할때 이 이론을 다시 외워도 될까요?
0
56
2
조건 반복문 질문: for 문 ?
0
66
1
정처기 26-2회. 9번 질문드립니다!
0
83
1
이론 보면서 질문이 있습니다.
0
80
2
정보처리기사 실기 26년 2회 SRT 스케줄링 문제 단위 질문
0
91
2
유튜브(정보처리기사 실기 | 26년 2회 기출문제 코드 해설)
0
151
2
262 정처기 실기 C언어코딩
0
48
1
정보처리기사 262 실기 Hash(해시) 질문
0
82
2
static 변수 질문입니다.
0
63
2
파이썬 4강 질문입니다.
0
72
2
모의고사 1회 3번문제
0
95
3
41강 30:10
0
68
2
이론 공부법 질문 있습니다.
0
93
2
부모의 생성자 관련 질문
0
70
2
시험지 문제에 필기해도 되나요?
0
91
3
41강 11:23
0
61
2
4강파이썬 질문입니다
0
58
2
try-catch 핸들러명
0
68
2
36강 3:48
0
66
2
35강 18:27
0
68
2
자식 코드 내 super() 생략
0
61
2
출력질문
0
80
2





