Java には 2 種類の修飾子があります。 アクセス修飾子 そして 非アクセス修飾子 。
Java のアクセス修飾子は、フィールド、メソッド、コンストラクター、またはクラスのアクセシビリティまたはスコープを指定します。アクセス修飾子を適用することで、フィールド、コンストラクター、メソッド、クラスのアクセス レベルを変更できます。
Java アクセス修飾子には 4 つのタイプがあります。
static、abstract、synchronized、native、volatile、transient など、アクセス以外の修飾子が多数あります。ここでは、アクセス修飾子のみを学習します。
Java アクセス修飾子を理解する
Java のアクセス修飾子を簡単な表で理解しましょう。
アクセス修飾子 | クラス内で | パッケージ内 | サブクラスによるパッケージ外のみ | 外側のパッケージ |
---|---|---|---|---|
プライベート | そして | N | N | N |
デフォルト | そして | そして | N | N |
保護されています | そして | そして | そして | N |
公共 | そして | そして | そして | そして |
1) プライベート
private アクセス修飾子はクラス内でのみアクセスできます。
レル対セントス
プライベートアクセス修飾子の簡単な例
この例では、2 つのクラス A と Simple を作成しました。クラスにはプライベート データ メンバーとプライベート メソッドが含まれます。これらのプライベート メンバーにはクラスの外部からアクセスしているため、コンパイル時エラーが発生します。
class A{ private int data=40; private void msg(){System.out.println('Hello java');} } public class Simple{ public static void main(String args[]){ A obj=new A(); System.out.println(obj.data);//Compile Time Error obj.msg();//Compile Time Error } }
民間建設業者の役割
クラス コンストラクターをプライベートにすると、クラスの外部からそのクラスのインスタンスを作成できなくなります。例えば:
class A{ private A(){}//private constructor void msg(){System.out.println('Hello java');} } public class Simple{ public static void main(String args[]){ A obj=new A();//Compile Time Error } }
注: クラスは、ネストされたクラスを除き、プライベートまたは保護にすることはできません。
2) デフォルト
修飾子を使用しない場合、次のように扱われます。 デフォルト デフォルトでは。デフォルトの修飾子はパッケージ内でのみアクセスできます。パッケージ外からはアクセスできません。プライベートよりもアクセシビリティが高くなります。ただし、保護されているというよりも制限があり、公開されています。
TCP と IP モデル
デフォルトのアクセス修飾子の例
この例では、pack と mypack の 2 つのパッケージを作成しました。 A クラスはパブリックではないため、パッケージの外部から A クラスにアクセスすることはできません。
//save by A.java package pack; class A{ void msg(){System.out.println('Hello');} }
//save by B.java package mypack; import pack.*; class B{ public static void main(String args[]){ A obj = new A();//Compile Time Error obj.msg();//Compile Time Error } }
上記の例では、クラス A とそのメソッド msg() のスコープはデフォルトであるため、パッケージの外部からアクセスすることはできません。
3) 保護されている
の 保護されたアクセス修飾子 パッケージ内およびパッケージ外からアクセスできますが、継承を通じてのみアクセスできます。
保護されたアクセス修飾子は、データ メンバー、メソッド、およびコンストラクターに適用できます。クラスには適用できません。
デフォルトのモディファよりもアクセシビリティが向上します。
保護されたアクセス修飾子の例
この例では、pack と mypack という 2 つのパッケージを作成しました。パックパッケージのAクラスはパブリックであるため、パッケージの外部からアクセスできます。ただし、このパッケージの msg メソッドは protected として宣言されているため、クラスの外からは継承を介してのみアクセスできます。
メガバイトとギガバイトの違いは何ですか
//save by A.java package pack; public class A{ protected void msg(){System.out.println('Hello');} }
//save by B.java package mypack; import pack.*; class B extends A{ public static void main(String args[]){ B obj = new B(); obj.msg(); } }
Output:Hello
4) 公共
の パブリックアクセス修飾子 どこでもアクセスできます。他のすべての修飾子の中で最も範囲が広いです。
パブリックアクセス修飾子の例
//save by A.java package pack; public class A{ public void msg(){System.out.println('Hello');} }
//save by B.java package mypack; import pack.*; class B{ public static void main(String args[]){ A obj = new A(); obj.msg(); } }
Output:Hello
メソッドオーバーライドを使用した Java アクセス修飾子
メソッドをオーバーライドする場合、オーバーライドされたメソッド (つまり、サブクラスで宣言されたメソッド) の制限を厳しくすることはできません。
class A{ protected void msg(){System.out.println('Hello java');} } public class Simple extends A{ void msg(){System.out.println('Hello java');}//C.T.Error public static void main(String args[]){ Simple obj=new Simple(); obj.msg(); } }
デフォルトの修飾子は、protected よりも制限的です。そのため、コンパイル時にエラーが発生します。