今日は、Javaのアクセス権制御について学びます。アクセス制御について議論する前に、アクセス制御が必要な理由について説明しましょう。 2つのシナリオを検討してください。
シナリオ1:エンジニアAはクラスクラスを書きましたが、エンジニアAはアプリケーションで使用される他のクラスからクラスにアクセスすることを望まないので、どのように対処する必要がありますか?
シナリオ2: Engineer AがClassaクラスを書いている場合、2つの方法fun1とfun2の方法がある場合、エンジニアはfun1のみを外の世界に見えるようにしたいだけです。つまり、他のエンジニアがClassaを呼び出す場合、メソッドfun1のみを呼び出すことができます。
現時点では、アクセス許可制御が役割を果たすことができます。
Javaでは、4種類のアクセス権制御が提供されています:デフォルトアクセス権(パケットアクセス権)、パブリック、プライベート、および保護されています。
上記の4種類のアクセス権限のクラスを変更するために、デフォルトのアクセス許可とパブリックのみを使用できることに注意してください。変更されたクラスの4つの権限は問題ありません。 (この場所で言及されているクラスは、内部クラスではなく、外部クラスをターゲットにしています)
以下では、修正クラスと修正クラスのメンバーのこれら4つのアクセス権制御を説明します。
1。変更カテゴリ
デフォルトアクセス許可(パッケージアクセス許可):クラスの変更に使用される場合、クラスは同じパッケージの他のクラスにのみ表示されることを意味します。
パブリック:クラスの変更に使用すると、クラスが他のすべてのクラスに表示されることを意味します。
いくつかの例から、2つの違いを見てみましょう。
例1:
main.java:
パッケージcom.cxh.test1;パブリッククラスMain { / ** * @param args * / public static void main(string [] args){// dodo auto-enerated method stub people = new people( "tom"); System.out.println(people.getName()); }} people.java
パッケージcom.cxh.test1; class people {//デフォルトアクセス許可(パッケージアクセス許可)プライベート文字列名= null; publicepeal(string name){this.name = name; } public string getname(){return name; } public void setName(string name){this.name = name; }}コードからわかるように、人のクラスを変更するとデフォルトアクセス許可が使用され、人のクラスとメインクラスは同じパッケージに含まれているため、ピープルクラスはメインクラスに表示されます。
プログラムの実行結果:
例2:
people.java
パッケージcom.cxh.test2; class people {//デフォルトアクセス許可(パッケージアクセス許可)プライベート文字列名= null; publicepeal(string name){this.name = name; } public string getname(){return name; } public void setName(string name){this.name = name; }}現時点では、Peopleクラスとメインクラスは同じパッケージに含まれていません。何が起こりますか?
メインクラスでプロンプトされたエラーは次のとおりです。
Peolpleクラスがメインクラスでは見えないことを促します。このことから、クラスがデフォルトのアクセス権限で変更された場合、クラスは同じパッケージの他のクラスにのみ表示され、異なるパッケージのクラスには表示されないことがわかります。
上の図のクイック修正プロンプトに示されているように、People Classのデフォルトアクセス許可を公開に変更すると、Peopleクラスはメインクラスに表示されます。
2。クラスを変更する方法と変数
デフォルトアクセス許可(パッケージアクセス許可):クラスのメソッドまたは変数がパッケージアクセス許可によって変更されている場合、クラスのメソッドまたは変数は同じパッケージの他のクラスでのみ表示されることを意味し、クラスのメソッドまたは変数は、異なるパッケージのクラスで表示することはできません。
プライベート:クラスのメソッドまたは変数がプライベートによって変更されている場合、クラスのメソッドまたは変数はクラス自体でのみアクセスでき、クラスまたは他のクラスで表示することはできません。
保護:クラスのメソッドまたは変数が保護されて変更された場合、このクラスのメソッドまたは変数に同じパッケージクラスにアクセスできます。異なるパッケージを持つクラスの場合、そのクラスから継承されたクラスのみがそのクラスのメソッドまたは変数にアクセスできます。
パブリック:一般に変更された方法または変数はどこにでも表示されます。
スコープされたクラスの方法と変数の違いを確認するために、いくつかの例を取りましょう。
例3:
Main.javaは変更されていません
people.java
パッケージcom.cxh.test1;パブリッククラスのPeople {private string name = null; publicepeal(string name){this.name = name; } string getName(){//デフォルトアクセス許可(パッケージアクセス許可)返品名; } void setName(string name){//デフォルトアクセス許可(パッケージアクセス許可)this.name = name; }}この時点で、呼び出しメソッドはメインクラスにgetNameとsetNameを表示できます。
しかし、人のクラスとメインクラスが同じパッケージにない場合:
パッケージcom.cxh.test2; //メインクラスのパブリッククラスとは別のパッケージにあります{private string name = null; publicepeal(string name){this.name = name; } string getName(){//デフォルトアクセス許可(パッケージアクセス許可)返品名; } void setName(string name){//デフォルトアクセス許可(パッケージアクセス許可)this.name = name; }}この時点で、メインクラスでエラーがプロンプトされます。
これから、デフォルトのアクセス許可を使用してクラスのメソッドまたは変数を変更する場合、同じパッケージの他のクラスでのみアクセスできることがわかります。
例4:
people.java
パッケージcom.cxh.test1;パブリッククラスのPeople {private string name = null; publicepeal(string name){this.name = name; }保護された文字列getname(){return name; } protected void setName(string name){this.name = name; }}現時点では、メインに呼び出しメソッドgetNameとsetNameを表示できます。
Peopleクラスとメインクラスが異なるパッケージにある場合:
パッケージcom.cxh.test2;パブリッククラスのPeople {private string name = null; publicepeal(string name){this.name = name; }保護された文字列getname(){return name; } protected void setName(string name){this.name = name; }}主にエラーが報告されます。
クラスマンがcom.cxh.test1で指定されて人を継承する場合、クラスマンに呼び出しメソッドgetNameとsetNameを表示できます。
パッケージcom.cxh.test1; com.cxh.test2.peopleをインポートします。パブリッククラスの男は人々を拡張します{public man(string name){super(name); } public string toString(){return getName(); }}Javaパッケージとクラスファイルに関する知識は次のとおりです。
1)Javaのパッケージは、主にクラスファイルの命名競合を防ぎ、コードの組織と管理を促進するために使用されます。
2)Javaソースコードファイルの場合、パブリッククラスがある場合、パブリッククラスは1つだけで、ソースコードファイルの名前はパブリッククラスの名前とまったく同じでなければなりません。さらに、他のクラスがある場合、これらのクラスはパッケージの外で見えません。ソースコードファイルにパブリッククラスがない場合、ソースコードファイルの名前は喜んで名前を付けることができます。
上記はこの記事に関するものです。すべての人の学習に役立つことを願っています。