Java Access Modifiers Tutorial

Java access modifiers help to control or restrict the accessibility of the members of a class. In day to day programming, we need to use access modifiers for a class, constructors, fields, and methods.

The below table summarizes all the java access modifiers and their visibility to other classes.

Access Modifier Class Package Subclasses Everywhere
private
default
protected
public

Details about Java access modifiers

private access modifier

Java private access modifiers restrict accessing the members of the class from outside the class. All private members in the class can be accessed within the same class only.

public class Bird {
    private String name;                //private fields
    private String color;

    private Bird(String name) {         //private constructor
        this.name = name;
    }

    private String getBirdName() {      //private method
        return name;
    }

    public Bird(String name, String color) {
        this(name);

        this.color = color;
    }
}

private fields/ private class variables

Java fields with private access modifiers restrict access from outside the class. In other words, private fields are accessible within the same class only.

private String name;    //private field

private constructor

Java constructor with private access modifiers restrict access from outside the class. In other words, a private constructor cannot use to create objects outside the class. However, we can call private constructors from other constructors or other methods which also in the same class.

private Bird(String name) {         //private constructor
    this.name = name;
}
this(name);         //calling private constructor
Bird bird = new Bird("Parrot");         //creating objects inside the same class
Note: A famous example of the usage of a private constructor is a singleton design pattern.

private methods

Java methods with private access modifiers restrict access from outside the class. The private methods cannot access from the outside the class but within the same class only.

private String getBirdName() {      //private method
    return name;
}

default access modifier

A Java class member with default access modifiers only accessible within the same class and the same package. When we write code we dont write any keywords to to declare the member as a default member.

class Bird {                    //default class

    String name;                //default fields
    String color;

    Bird(String name) {         //default constructor
        this.name = name;
    }

    String getBirdName() {      //default method
        return name;
    }

    public Bird(String name, String color) {
        this(name);

        this.color = color;
    }
}

default class

Java class with default access modifiers can only accessible within the same class or same package. The class will not visible to the other classes which are in different packages.

class Bird {                    //default class

default fields/ default class variables

Java fields with default access modifiers can only accessible within the same class or same package.

String name;    //default field

default constructor

Java constructor with default access modifiers can only accessible within the same class or same package.

Bird(String name) {         //default constructor
    this.name = name;
}

default methods

Java methods with default access modifiers can only accessible within the same class or same package.

String getBirdName() {      //default method
    return name;
}

protected access modifier

A Java class member with protected access modifiers can be accessible by all subclasses even though they are from outside of the package. Apart from that, members who are in the same class and the same package also can access the protected members.

public class Bird {

    protected String name;                //protected fields
    protected String color;

    protected Bird(String name) {         //protected constructor
        this.name = name;
    }

    protected String getBirdName() {      //protected method
        return name;
    }

    public Bird(String name, String color) {
        this(name);

        this.color = color;
    }
}

public access modifier

A Java class member with public access modifiers can be accessible from the everywhere.

public class Bird {                    //public class

    public String name;                //public fields
    public String color;

    public Bird(String name) {         //public constructor
        this.name = name;
    }

    public String getBirdName() {      //public method
        return name;
    }

    public public Bird(String name, String color) {
        this(name);

        this.color = color;
    }
}

Summary of where to apply access modifiers

Access Modifier Class Constructor Method Field
private
default
protected
public