What is the difference in the accessibility of the following variables in Java?
public class Joe {
public int a;
protected int b;
private int b;
int c;
}
I'm most interested in what the last one is doing.
public
: read/writable for anyoneprotected
: read/writable for
instances of subclasses and from within the enclosing package
private
: read/writable for any instance of the class
and inner or outer (enclosing) instanceint c
:
package-private, read/writable for
all classes inside same packageSee the JLS for more details
EDIT: Added the comment for protected stating that access is granted from inside same package, you guys are totally right. Also added comment for private
. I remember now... ;-)
Sorry for answering corrections to one previous answer but I don't have enough reputation to modify directly...
public
- read/writable for anyoneprotected
- read/writable for
instances subclasses and all classes
inside same packageint c
: package-private,
read/writable for all classes inside
same packageprivate
- read/writable for any member of that class itself and inner classes (if any)It is better to order the access modifiers this way, from the broadest access (public
) to the narrowest (private
), knowing that when going from narrow to broad, you don't lose any possibilities.
That's particularly important for "protected", where it is often misunderstood that classes in the same package can also access protected members of a class (not only its subclasses).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With