在 Java 中,为什么可以从同一包中的类外部访问受保护的成员?
赫伯特·希尔德特(Herbert Schildt)在他的书中在第172页(第3段)中说,“受保护的只适用于涉及继承的情况。
在第 228 页的表 9-1 中,可以从同一包中的非子类访问受保护的成员。
以下代码工作正常,并支持表 9-1 中的信息。
第1类.java:
package Mypack;
public class Class1
{
protected pro=1;
public Class1()
{
System.out.println(pro);
}
}
类别2.java
package Mypack;
class Class2 extends Class1
{
Class2()
{
System.out.println(pro);
}
}
类别3.java
package Mypack;
class Class3
{
Class3()
{
Class1 class1=new Class1();
System.out.println(class1.pro);
}
}
可以从派生类 Class2 访问变量 pro。但是,如何通过对 Class1 对象的引用从非派生类 Class3 访问它呢?它与第172页的陈述相矛盾。如果是这样,那么我发现在这种情况下,公共和受保护的说明符之间没有区别。