강의

멘토링

로드맵

Inflearn brand logo image

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

이지훈님의 프로필 이미지
이지훈

작성한 질문수

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

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

13:15초 명시적 호출이 되지 않는지에 대한 궁금증

해결된 질문

작성

·

37

0

안녕하세요 강의 잘보고 있습니다.

13:15초에서 자식 호출 이전에 부모 호출을 통해 Constructor of A가 출력되는데

 

제가 궁금한 점은 B상속 이후 그러니까

class B extends A

public B() {

super.paint() //해당부분에서 왜 명시적 호출이 이루어지지 않는지가 궁금합니다

 

제가 생각했을 때는

  1. super.paint()에 대한 매개변수가 지정되지 않았기 때문이다

  2. public B() { 에 void가 추가되지 않았기 때문이다 라고 생각되는데

답변 주시면 감사하겠습니다.

답변 3

0

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

안녕하세요, 우선 명시적 호출 / 암시적 호출은 생성자에만 사용하는 것입니다.

paint는 메서드로 명시적 호출이라는 단어를 쓰지 않습니다. 메서드는 다 명시적 호출입니다.

부르면 그냥 사용되죠.

 

부모 생성자는 그냥 무조건 불립니다. 다만 기본생성자가 없을 때는 아무 내용이 없으니까 생략되는 것처럼 보일 뿐입니다. 내용이 없으니까 아무 것도 실행되지 않는 것처럼 보이는 것이죠.

 

super.paint()는 지금 불린 겁니다. 그러니까 A가 출력이 된 것입니다.

그 다음에 그 안에 있는 draw()가 자식 것으로 가서 D가 출력된 것이죠.

 

두 번째 줄의 ADCD에 가장 첫 A가 부모에 있는 paint가 실행된 것입니다.

0

이지훈님의 프로필 이미지
이지훈
질문자

명시적 호출이 되는 부분과 부모-자식 기본생성자가 호출되는 경우를 나눠보니 아래와 같은데

두 문장의 어떤 차이점이 있을까요?

 

명시적 호출이 되는 경우

class B extends A

public void paint()

super.draw()

 

부모-자식 기본생성자가 호출되는경우

class B extends A

public B()

super,.paint()

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

말씀하시는 명시적 호출이라는 단어를 어디에 쓰고 계신지 모르겠습니다.

메서드는 명시적 호출이라는 것이 없는데, 어떤 것이 실행되는 것을 질문하신 걸까요?

 

출력값으로 말씀해주시면 답변드리기 수월합니다. 대댓글 부탁드립니다.

0

이지훈님의 프로필 이미지
이지훈
질문자

저는 밑단에 super가 있어서 명시적 호출이라고 생각했는데 아니더군요.

 

명시적 호출과 기본 생성자를 구분하는 방법은 super라고 생각했는데 윗단의 메서드나 void 등 더 명확하게 구분할 수 있는 요소가 있을까요?

이지훈님의 프로필 이미지
이지훈

작성한 질문수

질문하기