인프런 커뮤니티 질문&답변
[수정]업캐스팅 / 3:40 / 생성자 호출 관련 문의
해결된 질문
작성
·
27
·
수정됨
0
안녕하세요.
직전 강의에서 객체 생성 시 가장 먼저 생성자를 실행해야 한다고 설명해 주셨습니다.
그런데 본 강의 예제에서는 생성자 메서드를 실행하지 않네요.
업캐스팅인 경우에는 생성자를 실행하지 않는건가요?
감사합니다.
수정: 다른 질문을 보니 생성자를 실행하는 것 같네요.
4:00 예제의 경우
Car 생성자: Tesla Model 3 2021
ElectricCar 생성자: 75 kWh
(이하생략)
부모, 자식 생성자가 각각 이렇게 출력된다고 답변해 주셨는데, 이건 둘다 기본 생성자가 없어서 그런거 맞나요?
만약 Car 클래스에 파라미터 없는 기본 생성자가 있었으면
부모 클래스에는 기본 생성자 실행, 자식 클래스에는 파라미터 있는 생성자 실행이 되는게 맞나요?
답변 2
0
안녕하세요, 답변 드립니다.
부모, 자식 생성자가 각각 이렇게 출력된다고 답변해 주셨는데, 이건 둘다 기본 생성자가 없어서 그런거 맞나요?
-> 아닙니다. 자식인 ElectricCar에서 super로 명시적으로 파라미터가 있는 부모 생성자를 불렀기 때문입니다. ( super(model, year) 부분 )
부모의 생성자는 한 번만 호출되어야 합니다. 지금은 기본생성자를 부르지 않고 명시적으로 불렀습니다. 아예 super가 없거나, super()가 있는 경우에는 기본 생성자를 부릅니다.
만약에 부모의 기본생성자가 있었어도 그냥 무시됩니다.
심플하게 생각하시면 됩니다.
Java에서 자식 생성자로 객체가 태어나려면 부모의 필드가 먼저 다 초기화되어야 합니다. 그 이야기는 부모 생성자가 뭐라도 하나 불려야 한다는 것입니다. 명시적으로 파라미터가 있는 것이 불렸으면 그대로 가면 되고, 그렇지 않으면 기본 생성자를 Java가 알아서 불러줍니다.
그런데, 만약에 부모의 기본 생성자를 호출하지 않은 상태에서, 부모 클래스의 코드 안에 파라미터가 있는 생성자만 있을 때 부모의 기본생성자를 자식에서 super()로 부르면 Java에서 부모의 기본생성자를 자동으로 만들어주지 않고 오류를 출력합니다.
이 정도를 원칙으로 생각하시고 나머지 상속이나 생성자 호출 순서 체인에 대한 예제들을 풀어보시면 이해가 쉽게 될 것입니다.
0
안녕하세요, 인프런 AI 인턴입니다. 태0님.
자바의 객체 지향 프로그래밍에서 생성자는 객체가 생성될 때마다 호출됩니다. 그러나 주목할 점은 업캐스팅 시에 자식 클래스의 생성자와 부모 클래스의 생성자 호출 순서입니다.
생성자의 호출 순서
객체 생성 시 부모 클래스의 생성자 실행:
- 자식 클래스의 객체를 생성하면 자식 클래스의 생성자가 호출됩니다.
- 하지만 그 전에 자바는 항상 부모 클래스의 생성자를 먼저 호출합니다. 이는 자식 객체가 부모의 필드와 메서드를 상속 받기 때문입니다.
- 자식 클래스의 객체를 생성하면 자식 클래스의 생성자가 호출됩니다.
업캐스팅도 예외가 아님:
- 업캐스팅에서도 자식 객체는 부모 타입으로 참조되지만, 실제로 객체가 생성될 때는 자식 클래스의 생성자뿐만 아니라 부모 클래스의 생성자도 호출됩니다.
- 이렇게 함으로써 객체가 부모의 상태와 성질을 포함하여 완전히 초기화됩니다.
- 업캐스팅에서도 자식 객체는 부모 타입으로 참조되지만, 실제로 객체가 생성될 때는 자식 클래스의 생성자뿐만 아니라 부모 클래스의 생성자도 호출됩니다.
관련 예제
업캐스팅이 적용된 간단한 예제를 참조해 보세요:
class Parent {
public Parent() {
System.out.println("Parent 생성자");
}
}
class Child extends Parent {
public Child() {
System.out.println("Child 생성자");
}
}
// 메인 메소드
public class Main {
public static void main(String[] args) {
Parent parent = new Child(); // 업캐스팅
}
}
위의 코드에서 Child 객체를 생성하는 동안 Parent 생성자가 우선 실행됩니다.
추가 자료
이 주제를 더 명확히 이해하려면 다음의 유사한 질문과 답변을 참고해 보시는 것을 추천드립니다:
- 업캐스팅 관련 질문 - 생성자 호출 흐름 설명.
- 자바 상속과 업캐스팅 예제 - 상속과 생성자 호출에 대한 추가적인 논의.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





