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

时间:2010-05-12 16:09:21

标签: java inheritance packages protected

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

修改

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

2 个答案:

答案 0 :(得分:11)

也许你有点困惑。

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

// 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();
    }
}

它打印1

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

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

答案 1 :(得分:0)

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

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.
    }


}