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.