package accessControl;
public class ProtectedAccess {
protected int aNumber;
}
..........
package accessControl;
import accessControl.innerPackage.AnotherProtectedAccess;
public class LabClass {
private ProtectedAccess pa= new ProtectedAccess();
public void printProtectedAccess() {
System.out.println("Result: "+pa.aNumber);
}
}
.........
当在LabClass类里写了上面的pa.aNumber时,Eclipse没有报错.
2,验证protected修饰的成员不能被本package外的类访问,我用了如下个类:
package accessControl.innerPackage;
public class AnotherProtectedAccess {
protected int bNumber;
}
..........
package accessControl;
import accessControl.innerPackage.AnotherProtectedAccess;
public class LabClass {
private ProtectedAccess pa= new ProtectedAccess();
private AnotherProtectedAccess apa = new AnotherProtectedAccess();
public void printProtectedAccess() {
System.out.println("Result: "+pa.aNumber);
// System.out.println("Result of apa: "+apa.bNumber);
// The field AnotherProtectedAccess.bNumber is not visible
}
}
写下apa.bNumber后,Eclipse报错了:The field AnotherProtectedAccess.bNumber is not visible.
以上实验纠正了我的一个认识:protected修饰的成员可以被本package里的其它类访问的,而不是只能被子类和本类访问.
再看Thinking In Java,这本书里有如下的描述:
1, The levels of access control from "most access" to "least access" are public,protected,package access(which has no keyword), and private.
2, protected also gives package access - that ism other classes in the same package may access protected elements.
这样也就进一步证实了实验结果.