Javaでは、すべてに何らかのアクセス制御があります。
アクセス権限の制御レベルは、最大から最小値から最小値までです。
使用すると、クラスの各メンバー(ドメインまたはメソッド)定義の前に、パブリック、保護、およびプライベートのJavaアクセス修飾子が配置されます。
1。クラスメンバーのアクセス権
メンバーへのアクセスを取得する唯一の方法は、次のとおりです。
1)。このメンバーを公開します。誰であろうと、メンバーにアクセスできます。
2)。アドドレス修飾子によるメンバーへのパケットアクセスを付与し、同じパッケージに他のクラスを配置し、パッケージ内の他のクラスをメンバーにアクセスできます。
3)。継承クラスは、パブリックメンバーと保護されたメンバーの両方にアクセスできます。
4)。数値値を読み取って変更するためのアクセサーとミューテーターの方法を提供します。
1。パッケージアクセス許可
デフォルトのアクセス許可にはキーワードがありませんが、Passはパッケージアクセス許可を指します。つまり、現在のレポートの他のすべてのクラスがそのメンバーにアクセスできますが、このパッケージ以外のすべてのクラスでは、このメンバーは実際にプライベートです。
パッケージアクセスは、パッケージ内のすべての関連するクラスを組み合わせて、相互に簡単に対話できるようにします。
注:2つのクラスが同じディレクトリにあり、自分のパッケージ名を設定しない場合、Javaはそのようなファイルを自動的にディレクトリに提出したデフォルトのパッケージと見なすため、これらのファイルは互いにパッケージにアクセスできます。
次の例は、この問題を示しています。
//クラスケーキとパイは同じディレクトリにあり、任意のパッケージクラスpie {void f(){system.out.println( "pie.f()"); }} class cake {public static void main(string [] args){pie x = new pie(); xf(); }} //出力はpie.f()です2.パブリック:インターフェイスアクセス許可
キーワードのパブリックを使用すると、その後のメンバー宣言は、特にクラスライブラリを使用するクライアントプログラマーが利用できることを意味します。
3.プライベート:アクセスできません
キーワードプライベートは、メンバーを含むクラス以外のクラスがメンバーにアクセスできないことを示しています。同じパッケージの他のクラスは、このクラスのプライベートメンバーにアクセスできないため、これは自分自身を分離することに相当します。
秘密のキーワードのこの機能には、オブジェクトの作成方法を制御したり、他の人が特定のコンストラクター(またはすべてのコンストラクター)に直接アクセスできないようにするなど、多くの用途があります。見て
次の例:
class sundae {private sundae(){} static sundae makeasundae(){return new Sundae(); }} public class Icecream {public static void main(string [] args){sundae x = sundae.makeasundae(); }}この例では、Makeasundae()メソッドを呼び出すことでSundaeオブジェクトを作成できますが、コンストラクターを介してそれらを作成することはできません。
これは、クラスのプライベートフィールドにも適用されます。
ただし、注意すべきことの1つは、クラス内のオブジェクトへの参照がプライベートであるという理由だけで、他のオブジェクトがオブジェクトへの公開参照を持つことができないと考えることができないということです。
4.保護されている:アクセス許可を継承します
新しいパッケージが作成され、別のパッケージからクラスを継承する場合、アクセスできるメンバーはソースパッケージの公開メンバーです。
ベースクラスの作成者は、すべてのクラスではなく、派生クラスに特定のメンバーにアクセスを割り当てたい場合があります。
Protectedはパッケージアクセスも提供することに注意してください。つまり、同じパッケージ内の他のクラスは、このクラスの保護された要素にもアクセスできることに注意してください。
2。インターフェイスと実装
アクセス権の制御は、多くの場合、具体的な実装に隠されていると呼ばれます。
データとメソッドをクラスに包装し、特定の実装を隠すことは、多くの場合、カプセル化と集合的に呼ばれます。
2つの重要な理由により、アクセス許可制御は、データ型内の権限の境界を備えています。
1.クライアントプログラマーが使用できる制限を設定し、使用できません。クライアントプログラマーが使用しているインターフェイスの一部として内部メカニズムを誤って扱うことを心配することなく、構造内の独自の内部メカニズムを確立できます。
2。インターフェイスと特定の実装を分離します。
3。クラスアクセス権限
Javaでは、アクセス修飾子を使用して、ライブラリのユーザーがライブラリ内のどのクラスを利用できるかを判断することもできます。
修飾子は、キーワードクラスの前に配置する必要があります。例えば:
パブリッククラスウィジェット{......}または
Access.Widgetを改善します。
クラスはプライベートではないことを知っておく必要があります(クラスがプライベートである場合、クラスを除いて他のクラスにアクセスできません)、保護することもできません(実際、内部クラスはプライベートまたは保護できますが、これは後続の記事で説明されているように特別なケースです)。
他の人にクラスにアクセスしたくない場合は、クラスのすべてのコンストラクターをプライベートとして指定して、クラスのオブジェクトを作成することを妨げることができます。しかし、これには例外があり、クラスの静的メンバー内にクラスを作成することを妨げることはできません。次の例を見てみましょう。
class soup1 {private soup1(){} public static spoup1 makeoup(){// staticメソッドを使用してオブジェクトを作成しますnew soup1(); }} class soup2 {private soup2(){} private static soup2 ps1 = new soup2(); //シングルトンモードを使用してオブジェクトを作成しますpublic static soup2アクセス(){ps1を返します。 } public void f(){}} public classランチ{void testprivate(){// soup1 soup = new Soup1;実行できません} void testsingleton(){soup2.access()。f(); }}SOOP1とSOOP2のコンストラクターは両方ともプライベートであり、コンストラクターを直接使用してこのクラスのオブジェクトを作成することはできないことがわかります。ただし、これらの2つのクラスを使用することもできます。SOP1で静的メソッドを作成し、コンストラクターを使用してSOP1オブジェクトを作成し、参照を返します。 SOOP2の作成は、デザインパターンでシングルトンパターンを使用し、そのオブジェクトの1つのみを作成できます。 SOP2クラスのオブジェクトは、SOOP2の静的なプライベートメンバーとして作成されるため、1つだけがあり、パブリックメソッドからアクセスしない限りアクセスできません。
さらに、いくつかの制限は注目に値します。
1.各コンピレーションユニットには、パブリッククラスが1つしかありません。
2。パブリッククラスの名前は、上品および小文字を含むコンピレーションユニットを含むファイル名と正確に一致する必要があります。
3.コンピレーションユニットに公開クラスがない場合は、ファイルに自由に名前を付けることができます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。