我在 package1 中有一个名为 A 的类,在 package2 中有另一个名为 C 的类。C 类扩展了 A 类。
A 有一个实例变量,声明如下:
protected int protectedInt = 1;
这是A类的代码
package package1;
public class A {
public int publicInt = 1;
private int privateInt = 1;
int defaultInt = 1;
protected int protectedInt = 1;
}
这是C类的代码:
package package2;
import package1.A;
public class C extends A{
public void go(){
//remember the import statement
A a = new A();
System.out.println(a.publicInt);
System.out.println(a.protectedInt);
}
}
Eclipse 在 C.go() 的最后一行下划线,并说“A.protectedInt”不可见。这似乎与 oracle 文档中给出的“受保护”关键字的定义相冲突。
protected 修饰符指定该成员只能在其自己的包中访问(与 package-private 一样),此外,它的类在另一个包中的子类也可以访问。
这里发生了什么?