Access Modifiers in Java

May 20, 2018 0 Comments

1. Overview


In this tutorial, we’re going over access modifiers in Java, which are used for setting the access level to classes, variables, methods, and constructors.


Simply put, there are four access modifiers: public, private, protected and default (no keyword).


Before we begin let’s note that a top-level class can use public or default access modifiers only. At the member level, we can use all four.


2. Default


When we don’t use any keyword explicitly, Java will set a default access to a given class, method or property. The default access modifier is also called package-private, which means that all members are visible within the same package but aren’t accessible from other packages:


package com.baeldung.accessmodifiers;

public class SuperPublic {
static void defaultMethod() {
...
}
}

defaultMethod() is accessible in another class of the same package:


package com.baeldung.accessmodifiers;

public class Public {
public Public() {
SuperPublic.defaultMethod(); // Available in the same package.
}
}

However, it’s not available in other packages.


3. Public


If we add the public keyword to a class, method or property then we’re making it available to the whole world, i.e. all other classes in all packages will be able to use it. This is the least restrictive access modifier:


package com.baeldung.accessmodifiers;

public class SuperPublic {
public static void publicMethod() {
...
}
}

publicMethod() is available in another package:


package com.baeldung.accessmodifiers.another;

import com.baeldung.accessmodifiers.SuperPublic;

public class AnotherPublic {
public AnotherPublic() {
SuperPublic.publicMethod(); // Available everywhere. Let's note different package.
}
}

4. Private


Any method, property or constructor with the private keyword is accessible from the same class only. This is the most restrictive access modifier and is core to the concept of encapsulation. All data will be hidden from the outside world:


package com.baeldung.accessmodifiers;

public class SuperPublic {
static private void privateMethod() {
...
}

private void anotherPrivateMethod() {
privateMethod(); // available in the same class only.
}
}

5. Protected


Between public and private access levels, there’s the protected access modifier.


If we declare a method, property or constructor with the protected keyword, we can access the member from the same package (as with package-private access level) and in addition from all subclasses of its class, even if they lie in other packages:


package com.baeldung.accessmodifiers;

public class SuperPublic {
static protected void protectedMethod() {
...
}
}

protectedMethod() is available in subclasses (regardless of the package):


package com.baeldung.accessmodifiers.another;

import com.baeldung.accessmodifiers.SuperPublic;

public class AnotherSubClass extends SuperPublic {
public AnotherSubClass() {
SuperPublic.protectedMethod(); // Available in subclass. Let's note different package.
}
}

6. Comparison


The table below summarises the available access modifiers. We can see that a class, regardless of the access modifiers used, always has access to its members:








































ModifierClassPackageSubclassWorld

public

YYYY

protected

YYYN

default

YYNN

private

YNNN

7. Conclusion


In this short article, we went over access modifiers in Java.


It’s good practice to use the most restrictive access level possible for any given member to prevent misuse. We should always use the private access modifier unless there is a good reason not to.


Public access level should only be used if a member is part of an API.


As always, the code examples are available over on Github.




Source: Java Baeldung

Unknown

Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard. Google

0 comments:

Hot-product

Best Watch Store

Popular Posts

Contact Form

Name

Email *

Message *