The access to
classes, constructors, methods and fields are regulated using access modifiers i.e. a class can control
what information or data can be accessible by other classes. To take advantage
of encapsulation, you should minimize access whenever possible.
Java provides a number of access modifiers to help you set the level of access you want for classes as well as the
fields, methods and constructors in your classes. A member has package or
default accessibility when no accessibility modifier is specified.
Access Modifiers
1. private
2. protected
3. default
4. public
2. protected
3. default
4. public
Fields, methods and constructors declared public
(least restrictive) within a public class are visible to any class in the Java
program, whether these classes are in the same package or
in another package.
private access modifier
The private (most restrictive) fields or
methods cannot be used for classes and Interfaces. It also cannot be used
for fields and methods within an interface. Fields, methods or
constructors declared private are strictly controlled, which means they cannot
be accesses by anywhere outside the enclosing class. A standard
design strategy is to make all fields private and provide public getter methods
for them.
protected access modifier
The protected fields or methods cannot be used
for classes and Interfaces. It also cannot be used for fields and methods
within an interface. Fields, methods and constructors declared protected
in a superclass can be accessed only by subclasses in other packages. Classes
in the same package can also access protected fields,
methods and constructors as well, even if they are not a subclass of the
protected member’s class.
default access modifier
Java provides a default specifier which is used
when no access modifier is present. Any class, field, method orconstructor that
has no declared access modifier is accessible only by classes in the
same package. The default modifier is not used for fields and methods
within an interface.
Below is a program to
demonstrate the use of public, private, protected and default access modifiers
while accessing fields and methods. The output of each of these java
files depict the Java access specifiers.
The first class is SubclassInSamePackage.java
which is present in pckage1 package. This java file contains the Base
class and a subclass within the enclosing class that belongs to the
same class as shown below.
package pckage1;
class BaseClass {
public
int x = 10;
private
int y = 10;
protected
int z = 10;
int
a = 10; //Implicit Default Access Modifier
public
int getX() {
return
x;
}
public
void setX(int x) {
this.x
= x;
}
private
int getY() {
return
y;
}
private
void setY(int y) {
this.y
= y;
}
protected
int getZ() {
return
z;
}
protected
void setZ(int z) {
this.z
= z;
}
int
getA() {
return
a;
}
void
setA(int a) {
this.a
= a;
}
}
public class SubclassInSamePackage extends
BaseClass {
public
static void main(String args[]) {
BaseClass
rr = new BaseClass();
rr.z
= 0;
SubclassInSamePackage
subClassObj = new SubclassInSamePackage();
//Access
Modifiers - Public
System.out.println("Value
of x is : " + subClassObj.x);
subClassObj.setX(20);
System.out.println("Value
of x is : " + subClassObj.x);
//Access
Modifiers - Public
// If
we remove the comments it would result in a compilaton
// error
as the fields and methods being accessed are private
/* System.out.println("Value
of y is : "+subClassObj.y);
subClassObj.setY(20);
System.out.println("Value of y is :
"+subClassObj.y);*/
//Access
Modifiers - Protected
System.out.println("Value
of z is : " + subClassObj.z);
subClassObj.setZ(30);
System.out.println("Value
of z is : " + subClassObj.z);
//Access
Modifiers - Default
System.out.println("Value
of x is : " + subClassObj.a);
subClassObj.setA(20);
System.out.println("Value
of x is : " + subClassObj.a);
}
}
|
Output
is:
Value of x is : 10
Value of x is : 20
Value of z is : 10
Value of z is : 30
Value of x is : 10
Value of x is : 20
Value of x is : 20
Value of z is : 10
Value of z is : 30
Value of x is : 10
Value of x is : 20
The second class is
SubClassInDifferentPackage.java which is present in a different package then
the first one. This java class extends First class
(SubclassInSamePackage.java).
import pckage1.*;
public class SubClassInDifferentPackage
extends SubclassInSamePackage {
public
int getZZZ() {
return
z;
}
public
static void main(String args[]) {
SubClassInDifferentPackage
subClassDiffObj = new SubClassInDifferentPackage();
SubclassInSamePackage
subClassObj = new SubclassInSamePackage();
//Access
specifiers - Public
System.out.println("Value
of x is : " + subClassObj.x);
subClassObj.setX(30);
System.out.println("Value
of x is : " + subClassObj.x);
//Access
specifiers - Private
// if we remove the comments it would result
in a compilaton
// error as the fields and methods being
accessed are private
/* System.out.println("Value of y is
: "+subClassObj.y);
subClassObj.setY(20);
System.out.println("Value of y is :
"+subClassObj.y);*/
//Access
specifiers - Protected
// If we remove the comments it would
result in a compilaton
// error as the fields and methods being
accessed are protected.
/* System.out.println("Value of z is
: "+subClassObj.z);
subClassObj.setZ(30);
System.out.println("Value of z is :
"+subClassObj.z);*/
System.out.println("Value
of z is : " + subClassDiffObj.getZZZ());
//Access
Modifiers - Default
// If we remove the comments it would
result in a compilaton
// error as the fields and methods being
accessed are default.
/*
System.out.println("Value of a is :
"+subClassObj.a);
subClassObj.setA(20);
System.out.println("Value of a is :
"+subClassObj.a);*/
}
}
|
Output
is:
Value of x is : 10
Value of x is : 30
Value of z is : 10
Value of x is : 30
Value of z is : 10
The third class is ClassInDifferentPackage.java
which is present in a different package then the first one.
import pckage1.*;
public class ClassInDifferentPackage {
public
static void main(String args[]) {
SubclassInSamePackage
subClassObj = new SubclassInSamePackage();
//Access
Modifiers - Public
System.out.println("Value
of x is : " + subClassObj.x);
subClassObj.setX(30);
System.out.println("Value
of x is : " + subClassObj.x);
//Access
Modifiers - Private
// If we remove the comments it would
result in a compilaton
// error as the fields and methods being
accessed are private
/* System.out.println("Value of y is
: "+subClassObj.y);
subClassObj.setY(20);
System.out.println("Value of y is :
"+subClassObj.y);*/
//Access
Modifiers - Protected
// If we remove the comments it would
result in a compilaton
// error as the fields and methods being
accessed are protected.
/* System.out.println("Value of z is
: "+subClassObj.z);
subClassObj.setZ(30);
System.out.println("Value of z is :
"+subClassObj.z);*/
//Access
Modifiers - Default
// If we remove the comments it would
result in a compilaton
// error as the fields and methods being
accessed are default.
/* System.out.println("Value of a is
: "+subClassObj.a);
subClassObj.setA(20);
System.out.println("Value of a is :
"+subClassObj.a);*/
}
}
|
Output
is:
Value of x is : 10
Value of x is : 30
Value of x is : 30
No comments:
Post a Comment