
접근 제한자(Access Modifier)는 말 그대로 접근을 제한하기 위해 사용됩니다. 여기서 접근이란 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버의 접근을 말합니다.
어떤 경우에는 클래스와 인터페이스를 다른 패키지에서 사용하지 못하도록 막을 필요가 있습니다. 그리고 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 필드나 메소드를 사용하지 못하도록 막아야 되는 경우도 있습니다. 이때 접근 제한자를 사용할 수 있습니다.
자바는 4가지 종류의 접근 제어자를 제공한다.

접근 제어자의 종류
private : 모든 외부 호출을 막는다.
default (package-private): 같은 패키지안에서 호출은 허용한다.
protected : 같은 패키지안에서 호출은 허용한다. 패키지가 달라도 상속 관계의 호출은 허용한다.
public : 모든 외부 호출을 허용한다.
순서대로 private 이 가장 많이 차단하고, public 이 가장 많이 허용한다.
private -> default -> protected -> public
접근제어자가 public으로 설정되었으면 모든 클래스 접근이 가능하다. 즉, 접근 제약이 없다.
모든 외부 호출을 허용한다.
접근제어자가 protected로 설정되었으면 같은 패키지내의 클래스 또는 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근이 가능하다.
같은 패키지안에서 호출은 허용한다. 패키지가 달라도 상속 관계의 호출은 허용한다.
접근제어자를 별도로 설정하지 않는다면 default접근제어자가 되고 해당 패키지에서만 접근이 가능하다.
같은 패키지안에서 호출은 허용한다.
접근제어자가 private로 설정되었으면 같은 클래스에서만 접근이 가능하다.
모든 외부 호출을 막는다.
순서대로 public 이 가장 많이 허용하고, private 이 가장 많이 차단한다.
public -> protected -> default -> private
이미지 참고 - 나무위키
[인프런] 김영한의 실전 자바 - 기본편
자바 접근 제한자의 종류와 차이(public, protected, private)
[Java]접근제어자(Access Modifier)