Java Access Specifier in Overriding

w‮ww‬.lautturi.com
Java Access Specifier in Overriding

In Java, when you override a method in a subclass, you can use a more restrictive access modifier for the overridden method compared to the original method.

For example, if the original method has a public access modifier, you can use a protected or default (package-private) access modifier for the overridden method.

However, you cannot use a less restrictive access modifier for the overridden method, such as public, if the original method has a protected or default access modifier.

Here is an example of how you can override a method with a more restrictive access modifier in Java:

public class SuperClass {
    public void foo() {
        // Method implementation
    }
}

public class SubClass extends SuperClass {
    @Override
    protected void foo() {
        // Overridden method implementation
    }
}

In this example, the SuperClass has a public method called foo, and the SubClass overrides the foo method with a protected access modifier.

The overridden foo method in the SubClass has a more restrictive access modifier compared to the original foo method in the SuperClass, and this is allowed in Java.

It is important to note that the access modifier of an overridden method must be at least as restrictive as the original method, or the subclass will not compile.

For example, the following code will not compile because the overridden foo method in the SubClass has a less restrictive access modifier (public) compared to the original foo method in the SuperClass (protected):

public class SuperClass {
    protected void foo() {
        // Method implementation
    }
}

public class SubClass extends SuperClass {
    @Override
    public void foo() {  // Compile error: method foo in SubClass cannot override method foo in SuperClass
        // Overridden method implementation
    }
}

It is also important to note that the access modifier of an overridden method does not affect the accessibility of the method from outside the subclass.

The accessibility of an overridden method is determined by the access modifier of the original method.

For example, in the following code, the foo method is accessible from outside the SubClass because the original foo method in the SuperClass has a public access modifier:

public class SuperClass {
    public void foo() {
        // Method implementation
    }
}

public class SubClass extends SuperClass {
    @Override
    protected void foo() {
        // Overridden method implementation
    }
}

public class Main {
    public static void main(String[] args) {
        SubClass subClass = new SubClass();
        subClass.foo();  // Accessible from Main class
    }
}
Created Time:2017-11-01 22:29:44  Author:lautturi