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

ckstj8027님의 프로필 이미지
ckstj8027

작성한 질문수

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

상속과 접근 제어

상속과 접근제어지 질문

작성

·

233

0

첫번쨰 질문

child 클래스, parent 클래스,메인메소드 있는 클래스 가 있을떄 서로 각각 다른 패키지라고 할떄

Child c = new Child(); 일떄

c.protectedmethod(); 왜 이 코드는 실행이안되나요 상속받았으니 부를수있는거아닌가요 ?

두번쨰 질문

parent 클래스,메인메소드 있는 클래스는 같은 패키지이지만 child 클래스혼자만 다른 패키지소속 일경우

메인메소드에서 c.protectedmethod(); 작동 , c.publicmethod(); 도 당연히 작동 근데 여기서 c.protectedmethod() ; c 가 상속받은 클래스 의 객체여서 되는건지( 그리고 왜 첫번쨰와 세번쨰의 경우는 c.protectedmethod();가 실행이안되는지도 궁금합니다)

같은 패키지여서 되는것인지는 알지못함

그리고 Parent p = new Parent(); 일떄 p.defaultmethod();는 불러져도 c.defaultmethod();는 안됨 - 메인메소드와 부모 클래스가 같은 패키지여도 자식 클래스는 다른 클래스여서 디폴트는 안되는게 맞다고 생각하면되나여 ?

세번쨰 질문

이번엔 child 와 메인메소드가 같은 패키지일떄 parent 혼자 다른 패키지

이떄는 메인 메소드에서c.protectedmethod(); 는 왜 안돨까요? 상속 받으면 되는 걸로 알고있는데 publicmethod 는 불러지고 default 는 같은 패키지가 아니니까 못부른다 쳐도 c.protectedmethod(); 는 작동해야하는거아닌가요 헷갈립니다

답변 2

0

안녕하세요. ckstj8027님, 공식 서포터즈 David입니다.

  1. Child 외부가 아닌 내부에서 호출가능합니다.

  2. 같은 패키지라서 호출 가능합니다. 상속 관계 때문에 호출 되는 것이었다면 1번 상황에서도 호출 되었어야 합니다.

  3. 1, 2번을 참고해 주세요:)

감사합니다.

0

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

ckstj8027님의 질문에 대해 자바의 상속과 접근 제어자 관련 규칙에 기반하여 답변해 드립니다.

상속과 접근 제어자

자바에서 상속 관계에 있는 클래스 간의 접근 제어자는 다음과 같은 규칙을 따릅니다.

  1. public 접근 제어자는 모든 클래스에서 접근 가능합니다.
  2. protected 접근 제어자는 같은 패키지 내의 클래스 또는 다른 패키지에 있지만 해당 클래스를 상속받은 자식 클래스에서만 접근 가능합니다.
  3. default (아무 접근 제어자도 명시하지 않음) 접근 제어자는 동일한 패키지 내에서만 접근 가능합니다.
  4. private 접근 제어자는 해당 클래스 내에서만 접근 가능합니다.

질문을 통한 상황 분석

  • 첫 번째 상황과 세 번째 상황에서 왜 c.protectedmethod();가 실행되지 않는지에 대한 궁금증입니다. 정확한 상황 분석을 위해서는, Child 클래스와 Parent 클래스가 어떻게 상속 관계에 있고, protectedmethod(); 메서드의 정의 위치와 접근 제어자를 알아야 합니다. 일반적으로, 자식 클래스에서 상속받은 protected 메서드는, 자식 클래스의 인스턴스를 통해서도 접근할 수 있어야 합니다. 단, 메서드를 호출하는 위치가 해당 메서드의 접근 권한에 부합해야 합니다.

  • 두 번째 상황에서는, Child 클래스가 다른 패키지에 속해도, Parent 클래스의 protected 메소드를 호출할 수 있는 상황입니다. 이는 protected 메소드가 상속을 통해 해당 메소드에 접근 권한이 주어진 경우에 해당 됩니다. 단, default 메소드의 경우는 같은 패키지 내에서만 접근할 수 있으므로, Parent 클래스가 다른 패키지에 있으면 default 메소드에 접근할 수 없습니다.

정확한 해답 제공을 위해, “상속 질문”에서 비슷한 상황을 다루며, 상속 관계에서의 protected 접근 제어자에 대한 설명을 찾을 수 있습니다. 이 답변에서는 protected 멤버에 대한 접근은 자식 클래스의 메서드나 생성자 내부에서 일어나야 한다는 점과 같은 패키지 내에서의 호출이 허용된다는 점을 설명하고 있습니다.

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

ckstj8027님의 프로필 이미지
ckstj8027

작성한 질문수

질문하기