Modifiers are keywords used to define the scope and behaviour of classes, methods and variables in Java. Access modifiers specified who can access them. Java has a wide variety of modifiers that can be categorized as shown below:
• Modifiers for controlling access to a class, method or variable, which are: public, protected, private (These are also termed access modifiers) and no modifier (declaring without an access modifier).
• The static modifier for creating class methods and variables.
• The abstract modifier, for creating abstract classes and methods.
• The final modifier, for finalizing the implementations of classes, methods and variables.
• The synchronized and volatile modifiers, which are used for threads.
• The native modifier, which is used for creating native methods.
Given below are some examples of the above modifiers.
public class MyApplet extends java.appiet.Applet { ... } private boolean SwitchState; static final double pi = 3.14; protected static final int MAXNUMELEMENTS= 128; public static void main(String args[]) { ... }
It should be remembered that there cannot be more than one access modifier for a class, method or variable. All the modifiers are essentially optional, none have to appear in a declaration. Good object oriented programming style suggests that modifiers should he added to hest describe the intended use of, and restrictions on, the things that are being declared. In special situations (for example, inside an interface), certain modifiers are implicitly defined.
Using ‘no modifier’ is also sometimes referred as ‘package-private’ or ‘default’ or ‘friendly’ access. Usage of these access modifiers is restricted to two levels. The two levels are class level access modifiers and member level access modifiers.
We’ll be covering the following topics in this tutorial:
I) Class level access modifiers (java classes only)
Only two access modifiers is allowed,public and no modifier
• If a class is ‘public’, then it CAN be accessed from ANYWHERE.
• If a class has ‘no modifier’, then it CAN ONLY be accessed from ‘same package’.
II) Member level access modifiers (java variables and java methods)
All the four public, private, protected and no modifier is allowed.
• public and no modifier – the same way as used in class level.
• private – members CAN ONLY access.
• protected – CAN be accessed from ‘same package’ and a subclass existing in any package can access.
For better understanding, member level access is formulated as a table:
Access Modifiers | Same Class | Same Package | Subclass | Other packages |
public | Y | Y | Y | Y |
protected | Y | Y | Y | N |
no access modifier | Y | Y | N | N |
private | Y | N | N | N |
First row {public Y Y Y Y} should be interpreted as:
• Y – A member declared with ‘public’ access modifier CAN be accessed by the members of the ‘same class’.
• Y – A member declared with ‘public’ access modifier CAN be accessed by the members of the ‘same package’.
• Y – A member declared with ‘public’ access modifier CAN be accessed by the members of the ‘subclass’.
• Y – A member declared as ‘public’ CAN be accessed from ‘Other packages’. Second row {protected Y Y Y N} should be interpreted as:
• Y – A member declared with ‘protected’ access modifier CAN be accessed by the members of the ‘same class’.
• Y – A member declared with ‘protected’ access modifier CAN be accessed by the members of the ‘same package’.
• Y – A member declared with ‘protected’ access modifier CAN be accessed by the members of the ‘subclass’.
• N – A member declared with ‘protected’ access modifier CANNOT be accessed by the members of the ‘Other package’.
similarly interpret the access modifiers table for the third (no access modifier) and fourth (private access modifier) records.