Access Modifiers in Java: Default, Private, Public, Protected

Access modifiers in Java control which parts of your code are allowed to see and use a class, method, or variable. They're a core part of encapsulation, one of the four pillars of object-oriented programming, and choosing the right one keeps your code secure, predictable, and easy to maintain.

The Four Access Modifiers

  • public — accessible from any class, in any package, with no restrictions
  • protected — accessible within the same package, and by subclasses even in different packages
  • default (no modifier) — accessible only within the same package; also called package-private
  • private — accessible only within the class it is declared in, hiding it from everything else

Why Access Modifiers Matter

Without access control, every part of a large codebase could directly touch every other part, making bugs hard to trace and code fragile to change. Marking internal fields as private and exposing only what's needed through public getters and setters is a standard practice that keeps a class's internal workings hidden from the rest of the program.

Choosing the Right Modifier

A good rule of thumb is to start as restrictive as possible and only widen access when there's a real need. Use private for internal implementation details, default when access should stay within a package, protected when subclasses outside the package need access, and public only for the parts of a class meant to be a stable, external-facing API.

Interviewers often ask about access modifiers because they reveal whether you understand encapsulation. Being able to explain when to use protected vs default is a common signal of solid Java fundamentals.

Master Java with Uncodemy

Hands-on training, live projects, and placement support in our Java Programming Course.

Explore the Course