在Java中访问包私有字段

时间:2012-10-12 14:59:10

标签: java android encapsulation

浏览Android API来源。 FileDescriptor的数据成员descriptor没有访问修饰符:

int descriptor;

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

fd = new FileDescriptor();
fd.descriptor = fileSystem.open(...);

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

3 个答案:

答案 0 :(得分:25)

基本上,可以在classpackage级别访问package-private:

来自the source

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

答案 1 :(得分:1)

没有修饰语的声明,例如

  

int descriptor;

包是私有的,通常称为DEFAULT是否可以在包中访问,而不是在包外。 同一个包中的任何类都可以访问这些类,但这些类在包外不可见。

有关详细信息,请参阅here

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

答案 2 :(得分:0)

包私有字段(以及其他任何内容)就是:包中的私有字段。这意味着没有其他类可以访问包范围之外的字段(或其他实体)。有关更具体的详细信息,请参阅here