This is a clear overview of all the access modifiers:

Class Package Subclass

Same Package

Subclass

Different Package

World
Public Yes Yes Yes Yes Yes
Protected Yes Yes Yes Yes No
No modifier/Default Yes Yes Yes No No
Private Yes No No No No

1. Class: means only accessible in the same class.
2. Package: means only accessible in the classes of package you are working in
3. Subclass: means only accessible in the subclasses that belong to the class you are working in.

  • same package: means only accessible in the same subclass in the same package
  • different package: means only accessible in the same subclass in the same and in a different package

4. World: Accessible in every package
For example: When you make a public class/method/variable, the thing that you made is accessible in every package.

!Note! the modifiers can’t be used all the time everywhere. For example, an outer class can only use the modifiers public and default. On the other hand, a nested class can use them all.

You can use modifiers for: