Java : The Complete Reference 책을 사용하여 Java를 배우고 있습니다. 저는 현재 제 9 장에서 패키지로 바로 소개됩니다. 187 페이지에서 ""이라고 말합니다. "요소를 현재 패키지 외부에서 볼 수있게하려면 클래스를 직접 하위 클래스로 분류하는 클래스에만 허용하려면 해당 요소를 보호 된"으로 선언하십시오. 내가 이해할 수있는 것은 패키지에 상주하는 하위 클래스 인 'B'를 말하며 다른 패키지 'A'안에 public으로 정의 된 클래스를 확장하고 'proc'라는 멤버가 있고 proc을 만들려면 현재 패키지 'A'외부에 정의 된 하위 클래스를 포함하여 모든 하위 클래스에서 사용할 수 있으므로 보호 된 것으로 표시해야합니다. 이제 패키지 'B'내에서 정의 된 서브 클래스 내 구현을 살펴 있습니다다른 패키지에 정의 된 서브 클래스에서 클래스의 보호 된 멤버에 액세스 할 수 없습니다.
package subapp;
import app.*;
public class Test extends App {
public Test() {
App app = new App();
System.out.println(app.proc); // error
}
}
나는 (클래스 파일 모두) 모든 패키지가 올바르게로드 테스트의 "직접"슈퍼 것을 확신의 매개 변수화되지 않은 생성자는 공개적으로 액세스 할 수 있으며 proc은 protected로 표시되며 main() 함수는 문제가 없습니다. 하지만 "proc은/superclass path /에 접근을 보호하고있다"라는 subapp.Test를 실행할 때 런타임 예외가 발생한다.
[여기] (http://stackoverflow.com/a/33627846/276052)는 'protected'액세스 수정 자의 기본 사항을 보여주는 좋은 표입니다. – aioobe