Protected members in a superclass inaccessible to an indirect subclass in Java

Why in Java protected members of a superclass are not accessible by an indirect subclass in another package? I know that a direct subclass in another package can access protected members of the superclass. I thought that any subclass could access its inherited protected members.

EDIT

Sorry beginner mistake, subclasses can access protected elements of indirect superclasses.

+3
source share
2 answers

You may be a little embarrassed.

Here's my quick demo and shows an indirect subclass of access to 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();
    }
}

he prints 1

, a C.

, , , .

+11

, , , . :

package a;
public class A{
    protected int a;
}

package b;
public class B extends A{

}

package c;
public class C extends Bpublic void accessField(){
        A ancient = new A();
        ancient.a = 2;  //That wouldn't work.

        a = 2;   //That works.
    }


0

Source: https://habr.com/ru/post/1745139/


All Articles