Access Specifier vs Access Modifier: For a novice, both the words specifier and modifier looks one and the same and may be confusing. If you go by the literal meaning, it is more confusing, say, an access specifier specifies the access and access modifier modifies the access. Of course, if the meaning and functionality is known clearly, it is not confusing at all. Let us explain practically with examples.
A) Access Specifier – Meaning
Observe.
1. public void display() { }
2. private void display() { }
There are two display() methods with public and private. These two words give permissions to other classes to access display() method. public means any class from anywhere can access (like a public park; any one can enter or leave without ticket). private means not accessible to other classes; the method can be used by the same class (in which it is declared, like a private property used by the same family for which it belongs). Now I think it is clear. The public and private are known as access specifiers because they specify the access.
There are four access specifiers Java supports, public, protected, default (not specified at all) and private with different access restrictions (permissions). Infact, these four are keywords also.
B) Access Modifier – Meaning
Observe the following code.
class Test
{
public void display() { }
}
class Demo extends Test
{
public void display() { }
}
In the above code, the display() method of Test class is overridden by Demo class. Infact, Demo class is at liberty to override or not. Now let us apply a small modifier to display() method of Test class. See the following code.
class Test
{
public final void display() { }
}
class Demo extends Test
{
public void display() { }
}
In the super class Test, observe, the display() method is added with final keyword. In the super class, if a method is declared as final, it cannot be overridden by subclass. That is, super class by declaring method as final does not allow the subclass to override. This is the modification given to the method in super class with final. final is known as access modifier.
Now let us see one more modifier to have better understanding. Observe the following code.
class Demo
{
int marks = 50;
static int price = 70;
public static void main(String args[])
{
Demo d1 = new Demo();
System.out.println("d1.marks: "+ d1.marks); // marks called with object d1
System.out.println("price: " + price); // price called without object d1
}
}
In Demo class, marks is a non-static variable and price is static variable. marks (non-static variable) requires object to call from main() method where as static variable price does not require object. So, now what is the modification static gave. static modifies the access and gives the facility to call without the help of an object.
I am sure, you are very clear with the difference between specifier and modifier.
Access specifiers and access modifiers are applied to variables, methods and classes. Note, you cannot apply all specifiers to all (variables, methods and classes) and all modifiers to all. That is, for example, a local variable cannot be static and a variable cannot be abstract. Similarly, a class cannot be static.
Following links gives you the indepth knowledge of both.
1. Access Modifiers
2. Access Modifiers – Meanings
3. Access Specifiers
4. Java Private variable accessibility
5. Rules of Access Specifiers in Method Overriding
why can’t we say private is access modilfier when compared to final in the context of parent , child relation ships
Can we define 2 method with same name, same parameter list and with different access specifier inside a class?
I think the above article is not so correct. There is no access specifier in Java. Only access modifier. Please read Java Language Specification. I send the following link.
http://docs.oracle.com/javase/specs/jls/se8/jls8.pdf
It is a matter of controversy. Ofcourse, follow the authenticated link you have given.
in Student class i overrides the equals(),hashcode(),tostring(),
i used the HashSet type.here when i am adding objects to hashSet
HashSet ignoring Equals(),hashcode() in Student class why Plz Tel me sir
HashSet uses its own overridden methods and not yours. Suppose you extend my Employee class containing overridden methods of the above. You extend my Employee class and in your class you override the same methods. If you create an object Employee class, does it take my overridden methods of my code or yours.