7

探索 Android API 源。有一个没有访问修饰符FileDescriptor的数据成员:descriptor

int descriptor;

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

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

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

4

3 回答 3

29

基本上,package-private 可以在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
于 2012-10-12T15:04:52.153 回答
1

没有修饰符的声明,例如

整数描述符;

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

有关更多详细信息,请参阅此处

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
于 2012-10-12T15:04:20.563 回答
0

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

于 2012-10-12T15:00:39.410 回答