문제

이 질문은 이미 여기에 답이 있습니다.

Java에서 다음 변수의 접근성의 차이는 무엇입니까?

public class Joe {
    public int a;
    protected int b;
    private int b;
    int c;
}

나는 마지막이 무엇을하는지에 가장 관심이 있습니다.

도움이 되었습니까?

해결책

  • 공개 : 누구나 읽기/쓰기 가능
  • 보호 : 서브 클래스의 경우 읽기/쓰기 가능 그리고 둘러싸는 패키지 내에서
  • 개인 : 읽기/쓰기 가능 어느 클래스 인스턴스 및 내부 또는 외부 (Enclosing) 인스턴스
  • INT C : 패키지-프라이버시, 동일한 패키지 내의 모든 클래스에 대해 읽기/쓰기 가능

참조 JLS 자세한 사항은

편집 : 동일한 패키지 내부에서 액세스가 부여된다는 보호에 대한 의견을 추가했습니다. 여러분은 완전히 옳습니다. 또한 개인에 대한 의견을 추가했습니다. 나는 지금 기억한다 ... ;-)

다른 팁

하나의 이전 답변에 대한 수정에 응답해서 죄송하지만 직접 수정할 명성이 충분하지 않습니다 ...

  • 공개 - 누구나 읽기/쓰기 가능
  • 보호 - 인스턴스 서브 클래스 및 동일한 패키지 내의 모든 클래스에 대한 읽기/쓰기 가능
  • INT C : 패키지-프라이버시, 동일한 패키지 내의 모든 클래스에 대해 읽기/쓰기 가능
  • 개인 - 해당 클래스 자체의 모든 구성원 및 내부 수업 (있는 경우)에 대한 읽기/쓰기 가능

가장 넓은 액세스 (공개)에서 가장 좁은 (개인)에 이르기까지 액세스 수정자를 이러한 방식으로 주문하는 것이 좋습니다.

동일한 패키지의 클래스가 보호 된 클래스 (서브 클래스뿐만 아니라)에도 액세스 할 수 있다는 것이 오해되는 "보호"에 특히 중요합니다.

패키지 레벨 액세스를 완전히 피하려고합니다 (마지막으로 언급 한 액세스).

나는 수업을 독립적으로 유지하는 것을 좋아합니다. 다른 클래스가 내 수업에서 무언가에 대한 액세스가 필요하다면 공개되어야합니다 (그리고 속성이 아닌 방법에 따라야합니다). 그렇지 않으면 나는 당신이 부러 졌다고 생각합니다 캡슐화, 설명 된 바와 같이 추상화 대 정보 숨기기 vs 캡슐화.

그리고 이들 모두는 컴파일 타임 보호이며 런타임에 반사를 통해 쉽게 무시할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top