Sobes.tech
Junior

Tell me about access modifiers in Java.

sobes.tech AI

Answer from AI

In Java, there are four access modifiers:

  1. public Accessible from anywhere in any package.
  2. protected Accessible within the same package and from subclasses in other packages.
  3. default (absence of modifier) Accessible only within the same package.
  4. private Accessible only within the same class.

<br/>

Example:

package package1;

public class ClassA {
    public int publicField;
    protected int protectedField;
    int defaultField; // default access
    private int privateField;

    public void publicMethod() {}
    protected void protectedMethod() {}
    void defaultMethod() {} // default access
    private void privateMethod() {}
}
package package1;

public class ClassB {
    public void accessMethods(ClassA obj) {
        obj.publicMethod();
        obj.protectedMethod();
        obj.defaultMethod();
        // obj.privateMethod(); // Error: private access
    }
}
package package2;

import package1.ClassA;

public class ClassC extends ClassA {
    public void accessMethods() {
        publicMethod(); // inherited public method
        protectedMethod(); // inherited protected method
        // defaultMethod(); // Error: default access from another package
        // privateMethod(); // Error: private access (not inherited)
    }
}
package package2;

import package1.ClassA;

public class ClassD {
    public void accessMethods(ClassA obj) {
        obj.publicMethod();
        // obj.protectedMethod(); // Error: protected access from another package (not a subclass)
        // obj.defaultMethod(); // Error: default access from another package
        // obj.privateMethod(); // Error: private access
    }
}

<br/>

Visibility table:

Modifier Same class Same package Subclass (other package) Any place
private Yes No No No
default Yes Yes No No
protected Yes Yes Yes No
public Yes Yes Yes Yes