在他的书中,Herbert Schildt在第172页(第3段)中说,“保护只适用于涉及继承时”。在Java中,为什么可以在同一个包中从类之外访问受保护的成员?
在页228中,表9-1显示可以从同一包中的非子类访问受保护的成员。
以下代码工作并支持表9-1中的信息。
Class1.java:
package Mypack;
public class Class1
{
protected pro=1;
public Class1()
{
System.out.println(pro);
}
}
Class2.java
package Mypack;
class Class2 extends Class1
{
Class2()
{
System.out.println(pro);
}
}
Class3.java
package Mypack;
class Class3
{
Class3()
{
Class1 class1=new Class1();
System.out.println(class1.pro);
}
}
它是好的,可变亲可以从衍生访问class Class2。但是,如何通过对Class1的对象的引用,从非派生类Class3访问它?它与第172页的声明相矛盾。如果是这样,那么在这种情况下,我发现公共和受保护说明符之间没有区别。即宣告protected
is visible to itself, its children, and the package it's declared in.
如果Class3
是在不同的包,像mypack.nested
Herbert Schildt的书通常不是那么好,而且充满了不准确之处。 –