Access modifiers in java – explain.

May 22nd, 2008

Access modifiers specifies who can access them. There are four access modifiers used in java. They are public, private, protected, no modifer (declaring without an access modifer). 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 modifier and member level access modifier.

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 modifer’, 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 modifer 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 Modifier Same Class Same Package Subclass Other packages
public Y Y Y Y
protected Y Y Y N
no 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 as ‘public’ CAN be accessed by the members of the ’same class’.
  • Y – A member declared as ‘public’ CAN be accessed by the members of the ’same package’.
  • Y – A member declared as ‘public’ 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 as ‘protected’ CAN be accessed by the members of the ’same class’.
  • Y – A member declared as ‘protected’ CAN be accessed by the members of the ’same package’.
  • Y – A member declared as ‘protected’ CAN be accessed by the members of the ’subclass’.
  • N – A member declared as ‘protected’ CANNOT be accessed by the members of the ‘Other package’.

similarly interpret the access modifier table for the third (no modifier) and fourth (private modifier) records.

you are really doing a nice job. but all i want to say is that you should make the program more user friendly for the novice to comprehend.

MILICENT ANYAEGBU on November 4th, 2009 6:05 pm

Thanks. I am writing for beginner and intermediate level users. So what you say makes sense. I have received quite a lot of comments in the similar line. In recent posts, I had this in mind and presenting as simple as possible. Will update some of complex old posts soon.

Joe on November 5th, 2009 7:59 am

A class with no access modifier, in your terms, is “friendly or default”.
The way we (Java circles) like to define it is, “package-private”.

So, if a new Java developer learns to associate an empty access modifier
to “package-private” they’ll know its true visibility – it’s more explicit in
what it means. “Friendly” or “default” doesn’t describe what the visibility is.

“Friendly” will only make sense if the developer is coming from C++.

mjt on December 17th, 2009 9:08 am

MJT, I accept your point. Thanks, I have updated the post.

Joe on December 19th, 2009 2:53 pm

Hey,
Suppose: I don’t care whether my class is public, private or protected. So if I keep my class public or private or protected or default, will it affect on performance of my code?

Priyank on January 30th, 2010 7:35 pm

its about encapsulation dude not abt performanace. Performanace matter where it takes more resources to build or how other class/thread interact with this class object

raj roy on February 9th, 2010 2:46 am





hidden and gravatar enabled.