access modifiers java tutorial with examples
このビデオチュートリアルでは、Javaのアクセス修飾子とは何か、およびデフォルト、パブリック、保護、およびプライベートアクセス修飾子を使用する方法を例を使用して説明します。
Javaには、クラスとオブジェクトがあります。これらのクラスとオブジェクトはパッケージに含まれています。さらに、クラスにはネストされたクラス、メソッド、変数などを含めることができます。Javaはオブジェクト指向プログラミング言語であるため、不要な詳細を非表示にするカプセル化に従う必要があります。
Javaは、パッケージ、クラス、コンストラクター、メソッド、変数、またはその他のデータメンバーのスコープまたは可視性を制限するのに役立つ「アクセス修飾子またはアクセス指定子」と呼ばれるエンティティを提供します。これらのアクセス修飾子は、 「可視性指定子」。
アクセス指定子を使用することにより、特定のクラスメソッドまたは変数をアクセスに制限したり、他のクラスから非表示にしたりできます。
=> ここですべてのJavaチュートリアルを確認してください。
ソフトウェアテストのサンプルテストケース
学習内容:
Javaのアクセス修飾子に関するビデオチュートリアル
Javaのアクセス修飾子
アクセス指定子は、クラスまたはパッケージなどの他のデータメンバーがクラスのどのデータメンバー(メソッドまたはフィールド)にアクセスできるかも決定します。カプセル化と再利用性を確保するために、これらのアクセス指定子/修飾子はオブジェクト指向プログラミングの不可欠な部分です。
Javaの修飾子には、次の2つのタイプがあります。
#1)アクセス修飾子
Javaのアクセス修飾子を使用すると、フィールド、コンストラクター、クラス、メソッドなど、データメンバーのスコープ、アクセシビリティ、または可視性を設定できます。
#2)非アクセス修飾子
Javaは、クラス、変数、メソッド、コンストラクターなどで使用される非アクセス指定子も提供します。非アクセス指定子/修飾子は、JVMに対するエンティティーの動作を定義します。
Javaの非アクセス指定子/修飾子のいくつかは次のとおりです。
- 静的
- 最後の
- 概要
- 一時的
- 揮発性
- 同期
- ネイティブ
以前のチュートリアルでは、静的、同期、および揮発性のキーワードについて説明しました。他の非アクセス修飾子については、このチュートリアルの範囲を超えているため、今後のチュートリアルで説明します。
Javaのアクセス修飾子の種類
Javaには、クラスやその他のエンティティで使用できる4種類のアクセス指定子が用意されています。
これらは:
#1)デフォルト: 特定のアクセスレベルが指定されていない場合は常に、「デフォルト」であると見なされます。デフォルトレベルのスコープはパッケージ内にあります。
#2)公開: これは最も一般的なアクセスレベルであり、パブリックアクセス指定子がエンティティで使用される場合は常に、その特定のエンティティは、クラスの内外、パッケージの内外などからアクセスできます。
#3)保護: 保護されたアクセスレベルには、パッケージ内のスコープがあります。保護されたエンティティは、継承されたクラスまたは子クラスを介してパッケージの外部からもアクセスできます。
#4)プライベート: エンティティがプライベートの場合、このエンティティはクラスの外部からアクセスできません。プライベートエンティティには、クラス内からのみアクセスできます。
次の表にアクセス修飾子をまとめます。
アクセス指定子 | クラス内 | パッケージ内 | パッケージサブクラスの外部 | 外側のパッケージ |
---|---|---|---|---|
民間 | はい | しない | しない | しない |
デフォルト | はい | はい | しない | しない |
保護されています | はい | はい | はい | しない |
公衆 | はい | はい | はい | はい |
次に、これらの各アクセス指定子について詳しく説明します。
デフォルトのアクセス指定子
Javaのデフォルトのアクセス修飾子には、特定のキーワードはありません。アクセス修飾子が指定されていない場合は常に、それがデフォルトであると見なされます。クラス、メソッド、変数などのエンティティには、デフォルトのアクセス権があります。
デフォルトクラスはパッケージ内でアクセスできますが、パッケージ外からはアクセスできません。つまり、デフォルトクラスが定義されているパッケージ内のすべてのクラスがこのクラスにアクセスできます。
同様に、デフォルトのメソッドまたは変数も、パッケージの外部ではなく、それらが定義されているパッケージの内部でアクセスできます。
以下のプログラムは、Javaのデフォルトアクセス修飾子を示しています。
class BaseClass { void display() //no access modifier indicates default modifier { System.out.println('BaseClass::Display with 'dafault' scope'); } } class Main { public static void main(String args()) { //access class with default scope BaseClass obj = new BaseClass(); obj.display(); //access class method with default scope } }
出力:
上記のプログラムには、アクセス修飾子のないクラスとメソッドが含まれています。したがって、クラスとメソッドの両方の表示にデフォルトのアクセス権があります。次に、メソッドで、クラスのオブジェクトを直接作成してメソッドを呼び出すことができることがわかります。
パブリックアクセス修飾子
「public」として指定されたクラス、メソッド、またはデータフィールドには、Javaプログラムの任意のクラスまたはパッケージからアクセスできます。パブリックエンティティは、パッケージ内およびパッケージ外からアクセスできます。一般に、パブリックアクセス修飾子は、エンティティをまったく制限しない修飾子です。
class A { public void display() { System.out.println('SoftwareTestingHelp!!'); } } class Main { public static void main(String args()) { A obj = new A (); obj.display(); } }
出力:
保護されたアクセス指定子
保護されたアクセス指定子は、エンティティが宣言されているクラスのサブクラスを介したエンティティへのアクセスを許可します。クラスが同じパッケージにあるか別のパッケージにあるかは関係ありませんが、保護されたエンティティにアクセスしようとしているクラスがこのクラスのサブクラスである限り、エンティティにアクセスできます。
クラスとインターフェイスは保護できないことに注意してください。つまり、保護された修飾子をクラスとインターフェイスに適用することはできません。
保護されたアクセス修飾子は通常、親子関係で使用されます。
以下のプログラムは、Javaでの保護されたアクセス修飾子の使用法を示しています。
//A->B->C = class hierarchy class A { protected void display() { System.out.println('SoftwareTestingHelp'); } } class B extends A {} class C extends B {} class Main{ public static void main(String args()) { B obj = new B(); //create object of class B obj.display(); //access class A protected method using obj C cObj = new C(); //create object of class C cObj.display (); //access class A protected method using cObj } }
出力:
配列javaの最後に追加
プライベートアクセス修飾子
「プライベート」アクセス修飾子は、アクセシビリティレベルが最も低いものです。プライベートとして宣言されているメソッドとフィールドには、クラスの外部からアクセスできません。これらは、これらのプライベートエンティティをメンバーとして持つクラス内でのみアクセスできます。
プライベートエンティティは、クラスのサブクラスにも表示されないことに注意してください。プライベートアクセス修飾子は、Javaでのカプセル化を保証します。
プライベートアクセス修飾子に関して注意すべきいくつかのポイント。
- プライベートアクセス修飾子は、クラスとインターフェイスには使用できません。
- プライベートエンティティ(メソッドと変数)のスコープは、それらが宣言されているクラスに制限されています。
- プライベートコンストラクタを持つクラスは、mainメソッドのような他の場所からクラスのオブジェクトを作成することはできません。 (プライベートコンストラクターの詳細については、以前のチュートリアルで説明しています)。
以下のJavaプログラムは、プライベートアクセス修飾子を使用しています。
class TestClass{ //private variable and method private int num=100; private void printMessage(){System.out.println('Hello java');} } public class Main{ public static void main(String args()){ TestClass obj=new TestClass(); System.out.println(obj.num);//try to access private data member - Compile Time Error obj.printMessage();//Accessing private method - Compile Time Error } }
出力:
上記のプログラムでは、クラスオブジェクトを使用してプライベートデータメンバーにアクセスしようとしているため、コンパイルエラーが発生します。
ただし、プライベートメンバー変数にアクセスする方法があります。このメソッドは、Javaでゲッターとセッターを使用しています。そのため、getterがプライベート変数の値を読み取れるように、プライベート変数が宣言されているのと同じクラスにパブリックgetメソッドを提供します。
同様に、プライベート変数の値を設定できるパブリックセッターメソッドを提供します。
次のJavaプログラムは、Javaのプライベート変数にgetterメソッドとsetterメソッドを使用する方法を示しています。
class DataClass { private String strname; // getter method public String getName() { return this.strname; } // setter method public void setName(String name) { this.strname= name; } } public class Main { public static void main(String() main){ DataClass d = new DataClass(); // access the private variable using the getter and setter d.setName('Java Programming'); System.out.println(d.getName()); } }
出力:
上記のプログラムには、プライベート文字列変数を持つクラスがあります。プライベート変数の値を返すパブリックgetNameメンバーメソッドを提供します。また、引数として文字列を受け取り、それをプライベート変数に割り当てるクラスにパブリックsetNameメソッドを提供します。
どちらのメソッドもパブリックであるため、クラスのオブジェクトを使用して簡単にアクセスできます。このようにして、クラスのプライベートデータメンバーにアクセスしようとするたびにポップアップするコンパイルエラーを克服できます。
よくある質問
Q#1)Javaにはアクセス修飾子がいくつありますか?
回答: Javaには、デフォルト、パブリック、保護、プライベートの4つの修飾子があります。
Q#2)Javaのアクセス修飾子と非アクセス修飾子とは何ですか?
回答: アクセス修飾子は、クラス、メソッド、変数、コンストラクターなどのプログラムエンティティの可視性またはスコープを定義します。非アクセス修飾子は、エンティティの動作を定義します。 例えば、 同期されたメソッドまたはブロックは、マルチスレッド環境で動作できることを示し、最後の変数は、それが定数であることを示します。
Q#3)アクセス指定子が重要なのはなぜですか?
回答: 修飾子は、どのクラスが他のどのクラスまたはメソッドまたは変数にアクセスできるかを指定します。アクセス指定子を使用すると、さまざまなクラス、メソッド、コンストラクター、および変数へのアクセスを制限し、Javaエンティティのカプセル化と再利用性を確保できます。
Q#4)クラスで使用されていない修飾子はどれですか?
回答: ProtectedおよびPrivate修飾子はクラスには使用されません。
Q#5)非アクセス修飾子とは何ですか?
回答: クラス、メソッド、またはそれらが関連付けられている変数などのエンティティの動作を定義する修飾子は、非アクセス修飾子です。名前が示すように、彼らはアクセスを指定していません。 Javaは、static、final、synchronized、volatile、abstractなどのさまざまな非アクセス修飾子を提供します。
可視性修飾子の詳細
Javaには、変数、メソッド、およびコンストラクターにアクセスするための多くの修飾子が用意されています。
Javaには4つのタイプのアクセス変数があります。
- 民間
- 公衆
- デフォルト
- 保護されています
#1)プライベート
変数がプライベートとして宣言されている場合は、クラス内でアクセスできます。この変数はクラス外では使用できません。そのため、外部メンバーはプライベートメンバーにアクセスできません。
.torrentファイルをどうするか
注意: クラスとインターフェイスをプライベートにすることはできません。
#2)パブリック
パブリック修飾子を持つメソッド/変数には、プロジェクト内の他のすべてのクラスからアクセスできます。
#3)保護
変数が保護されていると宣言されている場合、他のパッケージと同じパッケージクラスおよびサブクラス内でアクセスできます。
注意: 保護されたアクセス修飾子は、クラスとインターフェイスには使用できません。
#4)デフォルトのアクセス修飾子
変数/メソッドがアクセス修飾子キーワードなしで定義されている場合、デフォルトの修飾子アクセスがあります。
アクセス修飾子 | 可視性 |
---|---|
公衆 | すべてのクラスに表示されます。 |
保護されています | パッケージ内のクラスおよび他のパッケージのサブクラスに表示されます。 |
アクセス修飾子なし(デフォルト) | パッケージでクラスに表示 |
民間 | クラスで見ることができます。クラス外からはアクセスできません。 |
デモクラス:
class AccessModifiersDemo { private int empsalaray ; public String empName; private void calculateSalary() { System.out.println('insid methodone'); } public String printEmpName(String empName ) { this.empName=empName; return empName; } }
別のクラスのクラスのメンバーへのアクセス:
public class TestAccessModifier { public static void main(String() args) { AccessModifiersDemo accessobj =new AccessModifiersDemo(); accessobj.calculateSalary(); } }
出力:
パブリックメンバーへのアクセス:
public class TestAccessModifier { public static void main(String() args) { AccessModifiersDemo accessobj =new AccessModifiersDemo(); System.out.println(accessobj.printEmpName('Bobby')); } }
出力:
ボビー
重要なポイント:
- アクセス指定子は、クラスの可視性を定義します。
- キーワードが言及されていない場合、それがデフォルトのアクセス修飾子です。
- Javaの4つの修飾子には、public、private、protected、およびdefaultが含まれます。
- プライベートキーワードと保護されたキーワードは、クラスとインターフェイスには使用できません。
結論
このチュートリアルでは、Javaのアクセス修飾子について詳しく説明しました。 Javaには、デフォルト、パブリック、プライベート、および保護の4種類のアクセス修飾子または可視性指定子が用意されています。デフォルトの修飾子には、キーワードが関連付けられていません。
クラス、メソッド、または変数にアクセス指定子が関連付けられていない場合、デフォルトのアクセス権があると見なされます。パブリックアクセス修飾子を使用すると、クラスまたはパッケージの内部または外部に関係なく、すべてにアクセスできます。 public修飾子の場合、アクセスに制限はありません。
保護された可視性指定子は、保護されたメンバーが宣言されているクラスを継承するサブクラスへのアクセスのみを許可します。プライベートアクセス修飾子を使用すると、プライベートデータメンバーとの最小のアクセス可能性をクラス内でのみアクセスできます。
修飾子は、クラス、コンストラクター、メソッド、変数などのデータメンバーのスコープを制限し、それらにアクセスできるクラスまたはパッケージに関する制限を定義します。アクセス指定子は、Javaでのカプセル化と再利用性を促進します。クラスとインターフェースは保護またはプライベートにできないことに注意してください。
=> ゼロからJavaを学ぶには、ここにアクセスしてください。