모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다는 것은, 소프트웨어가 올바로 동작하는 한 항상 가장 낮은 접근 수준을 부여해야 한다는 뜻이다. 멤버(필드, 메서드, 중첩 클래스, 중첩인터페이스)에 부여할 수 있는 접근 수준은 4가지다. private : 멤버를 선언한 톱래벨 클래스에서만 접근할 수 있다. package-private : 멤버가 소속된 패키지 안의 모든 클래스에서 접근할 수 있다. 접근 제한자를 명시하지 않았을때 적용되는 패키지 수준이다.(단, 인터페이스의 멤버는 기본적으로 public 이 적용된다.) protected : package-private 의 접근 범위를 포함하며, 이 멤버를 선언한 클래스의 하위클래스에서도 접근 할 수 있다. public : 모든곳에서 접근할 수 있다.