Monday, September 7, 2026

Java: Attempting to Assign Weaker Access Privileges Error

Access Specifiers in Method Overriding – Java

As per the rules of method overriding, you cannot use a weaker access specifier in the child class when overriding a method from the parent class.

For example, if the parent class has a method display() with a protected access specifier, the child class can override it using protected or public, but cannot use private.

Access Level

  1. Public

  2. Protected

  3. Default (package-private)

  4. Private

Access specifiers play an important role in inheritance and method overriding in Java.

Example:

/*
 * @Author TechBytes
 */

class AccessTest {

    protected void display() {
        System.out.println("Hello AccessTest:Display");
    }
}

class TestWithMain extends AccessTest {

    // Trying to override with a weaker access specifier
    // This will result in a compilation error.

    private void display() {
        System.out.println("Hello TestWithMain:display");
    }

    public static void main(String[] str) {

        AccessTest acObj = new TestWithMain();
        acObj.display();
    }
}

Error:

TestWithMain.java:8: display() in TestWithMain cannot override
display() in AccessTest;
attempting to assign weaker access privileges; was protected

private void display() {

The error occurs because the parent class method is protected, while the overriding method in the child class is private.

Correct Approach:

You can change the access specifier of the child method to protected or public.

Using public:

public void display() {
    System.out.println("Hello TestWithMain:display");
}

OR

Using protected:

protected void display() {
    System.out.println("Hello TestWithMain:display");
}

Both approaches work because the child class is not reducing the visibility of the parent method.

Note:

An overriding method can have the same or wider access than the method in the parent class, but it cannot reduce the access level.

Hope it helps you understand access specifiers and method overriding in Java.


No comments:

Post a Comment