javainheritanceinner-classesprotected

Java - Unable to access protected method of superclass extended by nested class


I'm new to java and getting the hang of protected visibility.

I have Class A which has protected method method1 as follows -

public abstract class A { 
    public A(...){}

    protected void method1(){
        // do something
    }

Now I have another Class B which extends a different Class C. Class B has a nested static class, Class D extending Class A

public class B extends C {
    public B(...){
        super(...);
    }

    private static class D extends A {
        D(...){super(...);}
    }

    public void method2() {
        D record = new D();
        record.method1(); // need to access the protected method1 of class A, which is the superclass of nested class D. Getting the error here
    }
}

I get this error - method1 has protected access in Class A Now my question is how can I access method1? I cannot change it to public in class A


Solution

  • You need to create a proxy method in class D as outlined below. Class D can access Class A's protected methods, but an instance of Class D can't call protected methods directly, and must have a proxy method to call the protected method of the super class.

    In class D, you need to create a public getter for the method in Class A, so:

    public class A {
        protected void protectedMethod() {}
    }
    
    public class D extends A {
        public void callProtectedMethod() {
            super.protectedMethod();
        }
    }
    
    final D record = new D();
    
    record.callProtectedMethod();