In this tutorial, we will look at different Access Specifiers in Java.
Java provides 4 different Acess Specifiers..
1. Private.
2. Protected.
3. Default.
4. Public.
We will see how these access specifiers are specified and how they are useful.
Any access specifier you define for a variable should be specified while declaring
or initialising the variable,in the form
<access_specifier> <data_type> <variable_name>
(in case of default access specifier, its just <data_type> <variable_name>.
In this Part, we will check how the specifiers behave when the classes defined in
same package are trying to access member variables of other classes.
Consider the following code,
package com.vk;
public class Vk {
private int a=40; // Access Specifier -> Private.
}
class Vk1
{
public static void main(String args[])
{
System.out.println("Creating a new Object");
Vk v=new Vk();
System.out.println("Trying to access the Private member variable");
v.a=50;
}
}
In the above program, we have a defined a member variable 'a' with Access
Specifier -> Private and we are trying to access this variable from a class 'Vk1'.
Please note that both the classes are defined in the same package -> com.vk
Run this program and check if the compilation is success.
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The field Vk.a is not visible
at com.vk.Vk1.main(Vk.java:17)
Private Variables cannot be accessed by any other class, they can only be accessed
in the class where they are defined.
Protected Access Specifier
Now lets change the access specifier for our variable 'a' to protected and check if
compilation is clean.
package com.vk;
public class Vk {
protected int a=40; // Access Specifier -> Protected.
}
class Vk1
{
public static void main(String args[])
{
System.out.println("Creating a new Object");
Vk v=new Vk();
System.out.println("Trying to access the Protected member variable");
v.a=50;
}
}
OUTPUT
Creating a new Object
Trying to access the Protected member variable
Protected variables can be accessed by the derived class.
Default Access Specifier
To define a variable with default access specifier, don't mention anything before
the data_type.
Now lets change the access specifier for our variable 'a' to default and check if
compilation is clean.
package com.vk;
public class Vk {
int a=40; // Access Specifier -> Default.
}
class Vk1
{
public static void main(String args[])
{
System.out.println("Creating a new Object");
Vk v=new Vk();
System.out.println("Trying to access the Default member variable");
v.a=50;
}
}
Creating a new Object
Trying to access the Default member variable
Default variables can be accessed by any other class defined in the same package.
Public Access Specifier
Now lets change the access specifier for our variable 'a' to Public and check if
compilation is clean.
package com.vk;
public class Vk {
public int a=40; // Access Specifier -> Public.
}
class Vk1
{
public static void main(String args[])
{
System.out.println("Creating a new Object");
Vk v=new Vk();
System.out.println("Trying to access the Public member variable");
v.a=50;
}
}
Creating a new Object
Trying to access the Public member variable