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

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

asdfa님의 프로필 이미지
asdfa

작성한 질문수

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

업캐스팅 (부모 형태, 자식 생성자)

업캐스팅 질문입니다

해결된 질문

작성

·

81

0

11분 07초

A a = new A();

A b = new B();
위 두개는 이렇게 생성하겠다 라는 생성만 하는 문장이지 않나요?

b.paint(); 는 출력을 하는 문장이므로 실행될때
classA의 기본생성자인 Contruct~와 classB의 기본생성자인 Contruct~가 출력되고 난후 B()내의 paint()가 실행되는건 이해가 갑니다.

근데 b.paint(); 가 실행되기 전에 A a = new A();를 선언함으로서 즉시 classA의 Contructor ~가 출력 되는 것이 이해되지 않습니다ㅠㅠ

답변 2

1

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

생성...이라는 것의 정의가 생성자를 실행시킨다는 의미입니다.

지금 생성자는 public A(), public B()입니다.

생성자 안에 있는 블록을 모두 실행하는 것이 생성자의 역할입니다.

 

메서드, 생성자 불리는 이름이 다른 것이지 어차피 블럭 안을 실행해야 하는 코드입니다.

보통 생성자는 객체를 초기화하기 때문에 생성자(Constructor)라고 불리는데, 시험에서는 초기화는 안하고, 수험생이 코드를 읽을 줄 아는지 테스트만 하기 때문에 출력문만 넣어서 나오죠..^^;

 

여튼, 생성자 안에 있는 출력문을 모두 실행하셔야 합니다.

1

안녕하세요, 인프런 AI 인턴입니다. 푸른만두님.

업캐스팅과 관련된 문제와 생성자의 호출 순서에 대해 질문해 주셨군요. 이에 관한 유사한 질문과 답변을 안내해 드릴 수 있을 것 같습니다.

관련 질문과 답변 링크

  1. 생성자 문제 질문 this() 질문
  2. Java 언어 기출문제의 변형
  3. 문제 관련 추가 질문입니다.

설명

A a = new A();
A b = new B();

위 두 문장은 객체를 생성하는 선언문입니다. 첫 번째 줄에서는 A 클래스의 객체를 생성하고, 두 번째 줄에서는 B 클래스의 객체를 생성하면서 업캐스팅하여 A 형식으로 참조합니다.

b.paint();

이 문장이 실행될 때, bB 클래스의 객체를 참조하고 있습니다. 따라서 B 클래스에 정의된 paint() 메서드가 실행됩니다. BA를 상속받았기 때문에, 만약 paint() 메서드가 B에 오버라이드 되어 있지 않다면 A 클래스의 paint() 메서드가 호출됩니다.

생성자 호출 순서

A a = new A(); 문장이 실행되면 A 클래스의 생성자가 호출되어 “Constructor of A”가 출력됩니다. 마찬가지로 A b = new B(); 문장이 실행될 때는 B의 생성자가 호출되기 전에 A의 생성자가 먼저 호출됩니다. 이는 자식 객체가 생성될 때 항상 부모 객체가 먼저 생성되는 Java의 기본 원칙 때문입니다. 따라서 B 클래스의 생성자가 실행되기 전에 A 클래스의 생성자가 먼저 출력되는 것을 확인할 수 있습니다.

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

asdfa님의 프로필 이미지
asdfa

작성한 질문수

질문하기