Search code examples
javainheritancepackageprotected

Protected members in a superclass inaccessible by indirect subclass in Java


Why is it that in Java, a superclass' protected members are inaccessible by an indirect subclass in a different package? I know that a direct subclass in a different package can access the superclass' protected members. I thought any subclass can access its inherited protected members.

EDIT

Sorry novice mistake, subclasses can access an indirect superclasses' protected members.


Solution

  • Perhaps you're a little confused.

    Here's my quick demo and shows an indirect subclass accessing a protected attribute:

    // A.java
    package a;
    public class A {
        protected int a;
    }
    
    // B.java 
    package b;   //<-- intermediate subclass
    import a.A;
    public class B extends A {
    }
    
    // C.java
    package c; //<-- different package 
    import b.B;
    public class C extends B  { // <-- C is an indirect sub class of A 
        void testIt(){
            a++;
            System.out.println( this.a );//<-- Inherited from class A
        }
        public static void main( String [] args ) {
            C c = new C();
            c.testIt();
        }
    }
    

    it prints 1

    As you see, the attribute a is accessible from subclass C.

    If you show us the code you're trying we can figure out where your confusion is.