Phase 12 of 20 · Topic 12.2

The 4 Access Modifiers Visibility Matrix

1Concept

Java provides 4 access levels: `public` (accessible everywhere), `protected` (accessible in same package and subclasses in different packages), `package-private / default` (accessible only within same package), and `private` (accessible only within the declaring class).

2Architecture Diagram

+---------------------+-------+---------+----------+-------+
| Modifier            | Class | Package | Subclass | World |
+---------------------+-------+---------+----------+-------+
| public              | Yes   | Yes     | Yes      | Yes   |
| protected           | Yes   | Yes     | Yes      | No    |
| default (no keyword)| Yes   | Yes     | No       | No    |
| private             | Yes   | No      | No       | No    |
+---------------------+-------+---------+----------+-------+

3Code Example

Core Java
public class AccessControlDemo {
    public String publicField = "Accessible to entire world";
    protected String protectedField = "Accessible to package and subclasses";
    String defaultField = "Accessible strictly within same package";
    private String privateField = "Accessible strictly within this class";

    public void displayAccess() {
        System.out.println("Private accessible inside class: " + privateField);
    }

    public static void main(String[] args) {
        AccessControlDemo demo = new AccessControlDemo();
        demo.displayAccess();
        System.out.println("Public: " + demo.publicField);
    }
}

4Expected Output

Private accessible inside class: Accessible strictly within this class
Public: Accessible to entire world

5Key Takeaways

  • Top-level classes can only be `public` or `package-private` (never private or protected).
  • Protected allows cross-package access ONLY through inheritance.
  • Package-private (default) is ideal for internal framework classes not intended for public consumption.