7

AndroidAPIソースをざっと見てください。アクセス修飾子のないデータメンバーがありますFileDescriptordescriptor

int descriptor;

FileOutputStream次に、新しいFileDescriptorを構築し、そのフィールドに割り当てるクラスがあります。

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

これは、Javaのフィールドアクセス制御モデルとどのように互換性がありますか?パッケージプライベートフィールドには宣言クラスの外部からアクセスできないと思いました。C++のように友情の概念はありません。

4

3 に答える 3

29

class基本的に、package-privateはおよびpackageレベルでアクセスできます。

ソースから:

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

次のような修飾子のない宣言

int記述子;

パッケージはプライベートであり、より一般的には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 に答える