강의

멘토링

로드맵

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

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

작성한 질문수

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

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

업캐스팅 질문

해결된 질문

작성

·

19

0

12:50의 업캐스팅 문제 예시4는 super.paint()이 전에 A를 먼저 참조하고 Constructor of A를 쓰는데 15:39의 업캐스팅 문제 예시6은 왜 super(10)이 있는데 바로 생성자 of AA10이 되나요?? super.paint와 super(10)의 차이인가요?

답변 2

0

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

안녕하세요! 말씀하신 두 문제 다 똑같이 부모 것을 먼저 참조하고 있습니다.

super.paint() 전에 super()가 생략되어 있기 때문에 부모에 있는 Constructor of A를 쓴 것이고,

유행 6번에서는 super(10)이 명시적으로 있기 때문에 A의 파라미터 1개짜리인 생성자 of AA 10을 출력한 것입니다.

 

둘 다 부모의 생성자를 먼저 참조한다는 것에서 같은 원리입니다.

정확히 어떤 부분이 더 헷갈리시는 것인지 대댓글로 추가 질문 부탁드립니다!

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

아하!! 그러면 super()는 생성자 오버로딩 경우에 다 존재 하는데, super()는 생략이 가능해서 다 생략되어있고, super(10)은 생략을 못해서 적혀있는건가요?

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

오버로딩이라는 것은 같은 이름인데 파라미터로 구분한다는 의미이고,

 

그것과 상관없이 명시적으로 부모 생성자를 호출하지 않는 구문에서는 다 super()가 생략되어 있다고 보시는 것이 맞습니다!

 

쓰든 안쓰든, 다른 파라미터 있는 부모생성자를 안 부르면 무조건 기본생성자를 부른다는 의미입니다.

0

안녕하세요, 인프런 AI 인턴입니다. 뽀로님.

업캐스팅과 관련하여 두 가지 예시에서의 차이를 이해하는 것은 중요한 부분입니다. 생성자 호출과 메서드 호출 사이에는 차이가 있으며, 이런 차이가 바로 질문하신 사례에 적용됩니다.

super.paint()와 super(10)의 차이

  1. super.paint():

    • 이는 부모 클래스의 paint() 메서드를 호출합니다. super는 메서드를 명시적으로 호출할 때 사용되며, 부모 클래스에 정의된 메서드를 자식 클래스에서 사용하고자 할 때 이 방식으로 호출합니다.
  2. super(10):

    • 생성자 초기에 부모 클래스의 특정 생성자를 호출합니다. 이 경우에는 매개변수가 있는 부모 클래스의 생성자를 호출하는 것으로, 인스턴스가 생성될 때 호출순서를 의미합니다.
    • 따라서, super(10)을 통해 부모의 매개변수가 있는 생성자가 먼저 실행되어 “생성자 of AA10”이 출력됩니다.

질문하신 내용의 맥락에서 보면, super.paint()는 메서드 호출을 통해 부모 클래스의 로직을 수행하는 것이고, super(10)은 인스턴스 생성시 부모 클래스의 생성자를 특정하여 호출하여 객체 초기화 시 특정한 로직을 수행하는 것입니다.

관련 질문 URL

이러한 차이를 알면 코드에서 왜 다른 출력이 나오는지를 보다 명확히 이해하실 수 있습니다. 해당 차이는 자바의 상속과 객체 초기화에 대한 이해를 돕습니다.

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

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

작성한 질문수

질문하기