为什么在 Java 中,不同包中的间接子类无法访问超类的受保护成员?我知道不同包中的直接子类可以访问超类的受保护成员。我认为任何子类都可以访问其继承的受保护成员。
编辑
对不起新手错误,子类可以访问间接超类的受保护成员。
为什么在 Java 中,不同包中的间接子类无法访问超类的受保护成员?我知道不同包中的直接子类可以访问超类的受保护成员。我认为任何子类都可以访问其继承的受保护成员。
编辑
对不起新手错误,子类可以访问间接超类的受保护成员。
也许你有点困惑。
这是我的快速演示,并显示了访问受保护属性的间接子类:
// 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
可以从 subclass 访问该属性C
。
如果您向我们展示您正在尝试的代码,我们可以找出您的困惑所在。
也许问题是他试图访问其他实例的受保护字段,而不是他的。比如:</p>
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.
}
}