class Test{
private static int i = 1;
public static void main(String[] args){
Test test = new Test();
System.out.println(test.i); //此处为何能访问到私有的i变量呢?
}
}
如果与Test类不同包,调用i变量却报错,为何?
高洛峰2017-04-18 10:49:37
이론적으로 액세스 수정자는 완전히 필요한 것은 아니며 프로그램 논리에 영향을 주지 않습니다. 이는 프로그래머가 보다 안전한 코드를 작성할 수 있도록 컴파일 단계에서만 수행됩니다.
질문자의 혼란을 이해합니다. 그는 여기서 this.i
를 사용하는 것이 더 적절하다고 생각합니다(물론, 형편없는 static
키워드를 삭제하세요).
기억하세요: 이러한 액세스 한정자는 실행 컨텍스트와 아무 관련이 없습니다. 예를 들어 private
은 이 변수에 액세스하는 데 사용하는 코드가 컴파일 타임에 현재 클래스에 작성되었는지 여부만 확인합니다. 그 정도로 조잡하다.