작성
·
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
입니다.
private
접근 제어자는 해당 클래스 내부에서만 접근이 가능합니다.default
접근 제어자(아무것도 명시하지 않은 경우)는 같은 패키지 내에서만 접근이 가능합니다.protected
접근 제어자는 같은 패키지 내의 클래스들과, 다른 패키지라도 이 클래스를 상속받은 자식 클래스에서 접근이 가능합니다.public
접근 제어자는 어디에서든 접근이 가능합니다.자세한 상황에 대한 답변은 아래와 같습니다.
defaultmethod()
와 protectedmethod()
는 모두 접근 가능합니다. 부모 클래스에서 default
나 protected
로 선언된 메소드는 같은 패키지 내에서 접근할 수 있기 때문입니다.c.defaultmethod()
는 실행되지 않습니다. 왜냐하면 default
메소드는 다른 패키지에서 접근할 수 없기 때문입니다. 하지만, c.protectedmethod()
는 실행됩니다. protected
메소드는 상속 관계에 있을 때 접근할 수 있기 때문입니다. p.defaultmethod()
는 실행됩니다. 이는 메인 클래스와 같은 패키지에 있는 클래스에서 호출되기 때문입니다.c.defaultmethod()
와 p.defaultmethod()
모두 실행되지 않습니다. default
접근 제어자는 같은 패키지 내에서만 접근 가능하기 때문입니다.상속을 받았다 하더라도 default
접근 제어자는 같은 패키지에서만 접근할 수 있기 때문에 패키지가 다른 경우 접근할 수 없습니다. 반면, protected
접근 제어자는 다른 패키지에 있더라도 상속을 받은 경우 접근할 수 있습니다.
따라서, 접근 제어자의 접근 가능 여부는 메소드가 위치한 클래스의 패키지 위치와 해당 메소드에 설정된 접근 제어자, 그리고 상속 여부에 따라 달라집니다.
이해가 되셨길 바랍니다. 추가적인 질문이 있으시면 언제든지 문의해주세요!