package-private アクセス レベルは より制限的ですprotected
。クラスをサブクラス化するだけで、保護された属性とメソッドにアクセスできます。保護されたメンバーは継承を目的としています (またはその可能性があります) が、パッケージ プライベート メンバーはそうではありません。
パッケージ内の複数のクラスが実装固有の属性または (ユーティリティ) メソッドにアクセスできるように、パッケージ プライベート メンバーがよく使用されます。
これの良い例は、String
とStringBuilder.value
char 配列の package-private コンストラクターです。
/*
* Package private constructor which shares value array for speed.
* this constructor is always expected to be called with share==true.
* a separate constructor is needed because we already have a public
* String(char[]) constructor that makes a copy of the given char[].
*/
String(char[] value, boolean share) {
// assert share : "unshared not supported";
this.value = value;
}
java.lang
そのため、パッケージ内のクラスは、セキュリティを損なうことなくStrings
、コンテンツが既に に存在する場合に効率的に new を作成できます。char[]
アプリケーションからこれを行うことはできません。可能であれば、String
不変の a の内部 char 配列にアクセス (参照) することになるからです (リフレクションはカウントされません!)。
現在の値を保持する char 配列とこれへのアクセサ メソッドもパッケージ プライベートであるため (または、実装が行われる場所) では、さまざまなユーティリティ メソッドStringBuilder
が使用され、内部の char 配列を公開することなく、効率的で高速な比較のためにこれを利用できます。世界"。AbstractStringBuilder
char[] value
char[] getValue()
String
contentEquals(StringBuffer sb)
contentEquals(CharSequence cs)