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

jye222님의 프로필 이미지
jye222

작성한 질문수

김영한의 실전 자바 - 기본편

9.상속.pdf 26페이지에 주석 질문이요

작성

·

254

0

저 주석은 잘못된거죠?

답변 1

2

Java에서 상속을 받는 클래스는 반드시 super() 를 호출해서 상속을 하는 부모 클래스의 생성자를 호출해야 하는데요

이 때 부모 클래스 (Class A) 가 다른 생성자 없이 기본 생성자만 존재한다면, super(); 를 호출하지 않아도 자바에서 대신 처리해주므로 명시적으로 선언하지 않아도 된다는 뜻으로 보입니다!

 

image

만약 아래와 같이 부모 클래스인 ClassA 가 기본 생성자가 아닌 패러미터를 가지는 생성자를 가질 시

 

image

하위 클래스(Class B) 의 생성자에서는 super(any int); 를 반드시 호출해야 합니다.

image

 

즉 주석의 기본 생성자 생략 가능 주석은

 

  1. 부모 클래스가 기본 생성자만 존재 할 시

  2. 기본 생성자 호출 super(); 는 사용해도, 안해도 무방하다(생략 가능하다)

는 의미로 보이네요!

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

this(a, 0); 옆에 주석을 말씀하시는건가요?

넵 맞습니다!

this(), super() 는 모두 생성자 매서드의 맨 첫 부분에서 선언되어야 하는데요

image

위처럼 ClassA(부모 클래스) 가 생략 가능한 기본 생성자를 가지지 않으면 this();(자기 자신의 생성자) 호출이 불가능합니다.

즉 말씀해주신 부분에서도 부모 클래스의 기본 생성자가 숨겨져 있습니다.

하지만

 this(a, 0); // 기본 생성자 생략 가능

주석의 위치 때문에 조금 모호한 표현처럼 느껴지긴 하네요 😢

jye222님의 프로필 이미지
jye222

작성한 질문수

질문하기