(상속과 생성자 관련) 상위 클래스 생성자가 먼저 수행되야 하는 이유! 저의 추측이 맞는지 궁금합니다.

조회수 801회

이안 미디어 '처음 시작하는 java프로그래밍' 이란 책으로 공부중인 학생입니다.

상속과 생성자에 관련되서 공부중이었는데 책에선 하위클래스의 명시적 생성자 혹은 묵시적 생성자가 실행되려면 상위클래스의 묵시적 생성자가 우선 수행되야하며 묵시적 생성자가 없을 경우 오류가 발생한다 했습니다.

그래서 제가 이해하기론 상위 클래스의 명시적 생성자가 있어도 묵시적 생성자가 실행되게 끔 super()문을 써주지 않으면 오류가 날 줄 알았는데 예제에서 확인해보니 상위클래스의 명시적 생성자만 실행시켜줘도 오류가 나지 않는다는 것을 알았습니다.

지금부터가 제가 궁금한 것입니다. 구글링을 통해서 다시 공부를 해보고 이해 한 게

상위 클래스의 아무 생성자가 먼저 수행되야한다 -> 즉 하위 클래스의 생성자가 수행되기 이전에 상위 클래스의 아무 생성자가 수행되면 된다 --> why) 상위 클래스의 생성자가 먼저 수행되야 상위 클래스가 메모리에 올라가고 하위 클래스가 상위클래스의 멤버변수, 메소드를 상속 받을 수 있기 때문이 아닐까?

제가 이해한 게 논리적으로 맞는건지 궁금합니다.

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    맞습니다. 자바 공식 튜토리얼과 스펙에서 설명하고 있습니다.

    If a constructor does not explicitly invoke a superclass constructor, the Java compiler automatically inserts a call to the no-argument constructor of the superclass. If the super class does not have a no-argument constructor, you will get a compile-time error. Object does have such a constructor, so if Object is the only superclass, there is no problem.

    명시적 생성자가 있을 경우 상관 없고 없을 경우에 컴파일러가 자동적으로 매개변수가 없는 생성자를 호출합니다. 물론 이 때 매개변수가 없으면 에러가 발생합니다.

    스펙에선 아래와 같이 반드시 부모 클래스가 초기화되어야 한다고 설명합니다.

    Before a class is initialized, its direct superclass must be initialized

    따라서, 작성자분이 이해하신 내용이 맞다고 보면 될 것 같습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)