인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

피로한 염소님의 프로필 이미지

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

상속과 생성자 호출순서

7:10

해결된 질문

작성

·

41

0

자식클래스 호출전에 부모클래스 먼저 호출된다했는데

출력값 둘쨋줄은 자식클래스의 기본 생성자인데 따로 호출한적이 없는데 왜 호출 되는건가요??

그리고 부모클래스 기본생성자의 출력 시점은 eCar.star();를 호출할때 출력되는건가요?

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요,

ElectricCar eCar = new ElectricCar() 라는 문구 자체가

자식 생성자를 통해서 만든 객체를 eCar라는 변수에 할당하라는 뜻입니다. 명시적으로 자식클래스의 기본생성자를 부른 것입니다. (new 단어 뒤에 오는 것이 어떤 생성자를 호출한다는 뜻)

 

부모클래스의 기본생성자는 자식이 불린 생성자가 호출되기 직전입니다.

자식이 태어나기 전에 불린다고 알고 계시면 헷갈리지 않습니다. (자식이 어떤 생성자가 불릴지 모르지만, 어쨌든 태어나기 전에 부모의 생성자가 먼저 태어남.)

 

헷갈리시면 안되는 게, 명시적으로 부모의 파라미터가 있는 생성자를 호출했다면 부모의 기본 생성자를 호출하지 않습니다.

 

포인트는 부모 생성자가 먼저 불리고 자식이 태어난다는 것입니다.

무슨 뜻인지는 뒤에서 더 많은 문제를 풀어보시면서 이해가 되실 겁니다.

 

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 피로한 염소님.

자바에서 객체를 생성할 때, 항상 부모 클래스의 생성자가 자식 클래스의 생성자보다 먼저 호출됩니다. 이는 객체 지향 프로그래밍의 상속 계층 구조에서 부모 객체가 먼저 초기화돼야 자식 객체도 정상적으로 초기화될 수 있기 때문입니다.

자식 클래스의 기본 생성자 호출 이유

자식 클래스의 생성자를 명시적으로 호출하지 않았더라도, 자바 컴파일러는 기본 생성자가 없는 클래스에 자동으로 기본 생성자를 추가합니다. eCar 객체가 생성되면, 이 객체는 자식 클래스의 인스턴스이므로, 해당 클래스의 기본 생성자도 자동으로 호출됩니다. 기본 생성자가 명시적으로 없는 경우, 컴파일러가 기본 생성자를 생성해 줍니다.

부모 클래스 기본생성자의 출력 시점

부모 클래스의 기본 생성자는 주로 해당 클래스의 인스턴스가 생성될 때 호출됩니다. 하지만 eCar.start();와는 무관하게, 해당 코드 실행 전에 이미 eCar 객체가 생성되는 과정에서 부모 클래스의 생성자는 호출되어 출력을 담당합니다. start() 메서드는 별도의 메서드 호출로, 메서드의 내용이 실행될 뿐이지 생성자와 직접적인 관련은 없습니다.

자세한 생성자 호출 순서에 대한 이해를 돕기 위해 여러 강의 및 질문답변이 존재합니다:
- 기본생성자
- 자식이 태어나면 부모를 호출한다??
- 자바 질문 하나만 하겠습니다!

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.