강의

멘토링

로드맵

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

ckstj8027님의 프로필 이미지
ckstj8027

작성한 질문수

상속과 접급제한 질문

작성

·

108

·

수정됨

0

패키지 위치에 따라서

1case

자식 & 메인 / 부모

2case

자식 / 메인 & 부모

3case

자식 / 메인 / 부모

Child c = new Child();

Parent p = new Parent(); 일떄

c.publicmethod(); ,p.publicmethod(); 는되고

c.privatemethod(); p.privatemethod(); 는 안되는거 자명함

근데 defaultmethod()와protectedmethod() 일 경우 헷갈림

1case 의 경우

c.defaultmethod(); 와 c.protectedmethod(); 실행안됨

# 예상 메인에서 부모의 디폴트메소드 접근 X 이라서 그런가요 ?

2case 의 경우

c.protectedmethod(); 실행되는데 c.defaultmethod() 실행안됨 근데 p.defaultmethod();는 됨

2-1c.defaultmethod() 실행안됨 이거는메인클래스있는 패키지와 c 가 다른 패키지여서 그런듯 ?

근데 그렇다기엔 c.protectedmethod()은 왜 불러짐 ? 같은 패키지 위치도아닌데 상속받아서 그런가 ?

상속받아서 되는거면 case 1이건 3이건 다 성립되야하는거아닌가요 ?

 

2-3 p.defaultmethod(); 됨 메인 클래스와 p 가 같은 패키지

3번의경우

c.defaultmethod() 실행안됨 , p.defaultmethod();도 안됨

메인메소드를 위치기준으로 확인해야하는지 클래스가 소속된 패키지 위치로 확인해야하는지 아니면 둘다 복합적으로 연결이 되어있는지 접근제어자 헷갈립니다 명확하게 설명좀부탁합니다

답변 1

0

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

ckstj8027님의 질문에 답변드리겠습니다.

Java에서 접근 제어자는 클래스 멤버(필드, 메서드, 생성자 등)의 접근을 제한하는 키워드입니다. 주로 사용되는 것은 private, default(접근 제어자를 명시하지 않은 경우), protected, public입니다.

  1. private 접근 제어자는 해당 클래스 내부에서만 접근이 가능합니다.
  2. default 접근 제어자(아무것도 명시하지 않은 경우)는 같은 패키지 내에서만 접근이 가능합니다.
  3. protected 접근 제어자는 같은 패키지 내의 클래스들과, 다른 패키지라도 이 클래스를 상속받은 자식 클래스에서 접근이 가능합니다.
  4. public 접근 제어자는 어디에서든 접근이 가능합니다.

자세한 상황에 대한 답변은 아래와 같습니다.

  • 1case: 같은 패키지 내에 있을 때, defaultmethod()protectedmethod()는 모두 접근 가능합니다. 부모 클래스에서 defaultprotected로 선언된 메소드는 같은 패키지 내에서 접근할 수 있기 때문입니다.
  • 2case: 자식 클래스가 다른 패키지에 있을 경우, c.defaultmethod()는 실행되지 않습니다. 왜냐하면 default 메소드는 다른 패키지에서 접근할 수 없기 때문입니다. 하지만, c.protectedmethod()는 실행됩니다. protected 메소드는 상속 관계에 있을 때 접근할 수 있기 때문입니다. p.defaultmethod()는 실행됩니다. 이는 메인 클래스와 같은 패키지에 있는 클래스에서 호출되기 때문입니다.
  • 3case: 다른 패키지에 위치한 경우, c.defaultmethod()p.defaultmethod() 모두 실행되지 않습니다. default 접근 제어자는 같은 패키지 내에서만 접근 가능하기 때문입니다.

상속을 받았다 하더라도 default 접근 제어자는 같은 패키지에서만 접근할 수 있기 때문에 패키지가 다른 경우 접근할 수 없습니다. 반면, protected 접근 제어자는 다른 패키지에 있더라도 상속을 받은 경우 접근할 수 있습니다.

따라서, 접근 제어자의 접근 가능 여부는 메소드가 위치한 클래스의 패키지 위치와 해당 메소드에 설정된 접근 제어자, 그리고 상속 여부에 따라 달라집니다.

이해가 되셨길 바랍니다. 추가적인 질문이 있으시면 언제든지 문의해주세요!

ckstj8027님의 프로필 이미지
ckstj8027

작성한 질문수

질문하기