Java中的间接子类无法访问超类中的受保护成员

为什么在Java中,超类的受保护成员是不可被另一个包中的间接子类访问的? 我知道不同包中的直接子类可以访问超类的受保护成员。 我认为任何子类都可以访问其inheritance的受保护成员。

编辑

抱歉新手错误,子类可以访问间接超类的受保护成员。

也许你有点困惑。

这是我的快速演示,并显示了一个访问受保护属性的间接子类:

// A.java package a; public class A { protected int a; } // B.java package b; //<-- intermediate subclass import aA; public class B extends A { } // C.java package c; //<-- different package import bB; 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(); } } 

它打印1

如您所见,属性a可从子类C访问。

如果你向我们展示你正在尝试的代码,我们可以找出你的困惑在哪里。

也许问题是他试图访问其他实例的受保护字段而不是他的。 像这样:

 package a; public class A{ protected int a; } package b; public class B extends A{ } package c; public class C extends B{ public void accessField(){ A ancient = new A(); ancient.a = 2; //That wouldn't work. a = 2; //That works. } }