Can private members be accessed in a subclass in Java?

No, private members cannot be accessed directly in a subclass in Java because the private access modifier restricts access to within the same class only.

How to Access Private Members in a Subclass?

Although direct access is not possible, there are a few indirect ways to use private members in a subclass:


1. Use Protected or Public Getters/Setters :

The superclass can provide getter and setter methods to allow controlled access to private members:

class Parent {
    private String secret = "Private Data";

    public String getSecret() {
        return secret;
    }
}

class Child extends Parent {
    void display() {
        System.out.println("Accessing via getter: " + getSecret());
    }
}

public class Test {
    public static void main(String[] args) {
        Child child = new Child();
        child.display();
    }
}



2. Use Protected Members Instead

If you want a subclass to access a member directly, use protected instead of private:

class Parent {
    protected String secret = "Protected Data";  // Now accessible in the subclass
}

class Child extends Parent {
    void display() {
        System.out.println("Accessing directly: " + secret);
    }
}



3. Use Constructors to Initialize Private Members

A subclass can call the superclass constructor to initialize private fields:

class Parent {
    private String secret;

    public Parent(String secret) {
        this.secret = secret;
    }

    public String getSecret() {
        return secret;
    }
}

class Child extends Parent {
    public Child(String secret) {
        super(secret);
    }

    void display() {
        System.out.println("Accessing via superclass constructor: " + getSecret());
    }
}