Inflearn brand logo image

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

주무세요님의 프로필 이미지
주무세요

작성한 질문수

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

Java: 상속을 정리하는 문제 10개

부모 클래스의 메서드 상속 관련 질문

해결된 질문

작성

·

104

0

15:17

 

부모 클래스의 private 메소드는 자식 클래스로 상속이 불가능 하다고 말씀해주셨습니다.

 

그렇다면,
protected, default의 경우에는 어떤지 궁금합니다.
제가 알기론, protected는 하위 클래스까지 상속가능하고, default는 동일 패키지까지 상속 가능하다고 들었는데요.

protected와 default는 자식 클래스에 상속이 가능한지 궁금합니다.

답변 3

1

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

안녕하세요,

접근제어자에 따른 상속 여부 답변드립니다.

 

private: 부모 클래스의 private 메소드는 자식 클래스로 상속되지 않습니다. 오직 해당 클래스 내에서만 접근 가능합니다.

 

protected:

  • protected 메소드는 자식 클래스로 상속됩니다.

  • 같은 패키지 내의 다른 클래스에서 접근 가능합니다.

  • 다른 패키지의 자식 클래스에서도 접근 가능합니다.

 

default (접근 제어자 명시하지 않은 경우):

  • default 메소드도 자식 클래스로 상속됩니다.

  • 단, 같은 패키지 내에 있는 자식 클래스에서만 접근 가능합니다.

  • 다른 패키지에 있는 자식 클래스에서는 접근할 수 없습니다.

public:

  • public 메소드는 자식 클래스로 상속됩니다.

  • 어디서든 접근 가능합니다.

요약하자면, protected와 default 모두 자식 클래스에 상속은 되지만, 접근 가능 범위가 다릅니다. protected는 패키지가 달라도 자식 클래스에서 접근 가능하지만, default는 같은 패키지 내의 자식 클래스에서만 접근 가능합니다.

 

protected가 아마 가장 헷갈릴 것 같아서 예제 하나 준비했습니다.

class ChildProtected extends ParentProtected {
    void testMethod() {
        protectedMethod(); // 접근 가능
    }
    
    // main 메소드 추가
    public static void main(String[] args) {
        ChildProtected child = new ChildProtected();
        child.testMethod();
    }
}

class ParentProtected {
    protected void protectedMethod() {
        System.out.println("This is protected method");
    }
}

출력값: This is protected method

 

 

 

0

주무세요님의 프로필 이미지
주무세요
질문자

답변 감사드립니다

 

동일/외부 패키지를 나누는 기준은 폴더 경로로 구분되나요?

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

네 폴더(디렉토리)로 구분합니다. 참고로 아직까지는 정보처리기사 실기에서 별도의 패키지 코드가 출제된 적은 없습니다.

0

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

자바에서 접근 제어자에 따른 상속 가능성에 대한 질문 정말 좋습니다. 자바의 접근 제어자는 클래스 멤버의 가시성과 상속 관계에 중요한 역할을 합니다. 이를 통해 클래스와 패키지 내에서 멤버의 접근을 제어하여 보다 안전하고 명확한 클래스 구조를 갖출 수 있습니다.

주요 접근 제어자와 상속

  1. private:

    • Private 멤버는 해당 클래스 내부에서만 접근 가능하며, 자식 클래스에 상속되지 않습니다.
  2. protected:

    • Protected 멤버는 같은 패키지에 있는 클래스와 모든 자식 클래스에서 접근할 수 있습니다.
    • 따라서, 자식 클래스에 상속이 가능하며, 자식 클래스에서도 이 멤버를 사용할 수 있습니다.
  3. default (package-private):

    • Default 멤버는 명시적 접근 제어자를 지정하지 않았을 때 기본적으로 설정되는 접근 수준입니다.
    • 같은 패키지에 있는 다른 클래스에서만 접근할 수 있습니다. 즉, 상속을 통해 자식 클래스에서 접근하려면 자식 클래스는 같은 패키지 내에 있어야 합니다.

결론

  • Protected 는 자식 클래스에서 완전히 상속 가능하며, 패키지를 초월하여 하위 클래스에서 접근 가능합니다.
  • Default 는 같은 패키지 내의 자식 클래스에서만 상속이 가능하며 접근할 수 있습니다.

이와 같은 내용을 염두에 두시면 클래스를 설계할 때 더 전략적으로 접근 제어자를 선택할 수 있게 되실 것입니다.

관련된 논의와 더 불명확한 점들을 풀이한 게시글을 참고하시면 도움이 될 수 있습니다:

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

주무세요님의 프로필 이미지
주무세요

작성한 질문수

질문하기