了解 Java 的受保护修饰符
2022-09-01 02:33:01
我在 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 在中的最后一行加了下划线,并说“A.protectedInt”不可见。这似乎与“受保护”关键字的定义相冲突,因为Oracle文档说:C.go()
受保护的修饰符指定只能在其自己的包中访问成员(与包专用一样),此外,还可以由另一个包中其类的子类访问。
这是怎么回事?