This question already has an answer here:
Slightly related to my other question: What is the difference between the following:
private class Joe
protected class Joe
public class Joe
class Joe
Once again, the difference between the last 2 is what I'm most interested in.
A public class is accessible to a class in any package.
A class with default access (
class Joe
) is only visible to other classes in the same package.The private and protected modifiers can only be applied to inner classes.
A private class is only visible to its enclosing class, and other inner classes in the same enclosing class.
A protected class is visible to other classes in the same package, and to classes that extend the enclosing class.
See JLS for more info.
A class with default access has no modifier preceding it in the declaration.
The default access is a package-level access, because a class with default access can be seen only by classes within the same package.
If a class has default access, a class in another package won’t be able to create a instance of that class, or even declare a variable or return type. The compiler will complain. For example:
Try to compile this 2 sources. As you can see, they are in different packages, and the compilation will fail.