在Java中访问包私有字段

Sev*_*yev 7 java android encapsulation

浏览Android API源代码.有FileDescriptor一个descriptor没有访问修饰符的数据成员:

int descriptor;
Run Code Online (Sandbox Code Playgroud)

然后有FileOutputStream一个类构造一个新的FileDescriptor并分配给该字段:

fd = new FileDescriptor();
fd.descriptor = fileSystem.open(...);
Run Code Online (Sandbox Code Playgroud)

这与Java的现场访问控制模型如何兼容?我认为无法从声明类外部访问包私有字段,并且没有像C++那样的友情概念.

Nom*_*Sim 28

基本上,包装和私营部门可以在访问classpackage水平:

来源:

Access Levels
Modifier    Class   Package  Subclass World
public         Y        Y       Y       Y
protected      Y        Y       Y       N
no modifier    Y        Y       N       N
private        Y        N       N       N
Run Code Online (Sandbox Code Playgroud)