Introduction
In Java, access modifiers define the visibility and accessibility of classes, methods, and variables. A common question among beginners is "Why can't a main class be declared as protected?" The answer lies in Java's rules for top-level classes and access control
Can a Top-Level Class Be protected?
No. A top-level class (a class declared directly inside a .java file) cannot be declared as protected.
protected class Main {
public static void main(String[] args) {
System.out.println("Hello Java");
}
}
Why Is protected Not Allowed for the Main Class?
- protected Works Through Inheritance
The protected access modifier is designed to allow access:
Inside the same package.
In child classes (subclasses), even if they are in different packages.
A top-level class does not have a parent class that needs to control access through inheritance, so protected has no meaningful purpose for it.
- Java Allows Only public or Default for Top-Level Classes
Java language rules allow only two access levels for top-level classes:
public → Accessible from anywhere.
default (no modifier) → Accessible only within the same package.
private and protected are only allowed for class members or nested classes.
- JVM Must Be Able to Locate the Main Class
When a Java program starts, the JVM needs to load the class containing the main() method.
A top-level class must follow Java's accessibility rules, which means it can be public or default, but not protected.
Can a Nested Class Be protected?
Yes. A class declared inside another class (nested class) can use the protected access modifier.
`class Outer {
protected class Inner {
void display() {
System.out.println("Protected Nested Class");
}
}
}`
Top comments (0)