Java のアクセス修飾子について: public、protected、package-private、および private

Java

Java アクセス修飾子の概要

Java では、アクセス修飾子 (public、protected、package-private、および private) の違いを理解することが、堅牢で保守可能なコードを作成するために重要です。各修飾子は特定の目的を果たし、クラス、メソッド、変数の可視性とアクセス可能性を決定します。

適切なアクセス修飾子の選択は、コードのカプセル化とセキュリティだけでなく、プログラムのさまざまな部分がどのように相互作用するかにも影響します。この記事では、継承を含むさまざまなシナリオでこれらのアクセス修飾子を効果的に使用するためのルールとベスト プラクティスについて説明します。

指示 説明
protected 独自のパッケージ内およびサブクラスによるメンバーへのアクセスを許可します。
package-private デフォルトのアクセスレベル。独自のパッケージ内でのみアクセスを許可します。
@Override メソッドがスーパークラス内のメソッドをオーバーライドすることを目的としていることを示します。
public class 他のクラスからアクセスできるクラスを定義します。
private メンバーへのアクセスをその独自のクラス内のみに制限します。
extends クラスがスーパークラスから継承していることを示します。
System.out.println() テキストをコンソールに出力します。
public void 他のクラスからアクセスでき、値を返さないメソッドを定義します。

Javaのアクセス修飾子の説明

提供されているスクリプトは、Java アクセス修飾子の使用を示しています。 、 、 、 そして private。最初のスクリプトでは、クラス は、さまざまなアクセス レベルのフィールドで定義されます。の フィールドには他のクラスからアクセスでき、最も寛容なアクセス レベルを示します。の フィールドを使用すると、同じパッケージ内およびサブクラスによるアクセスが可能になります。の package-private デフォルトのアクセス レベルであるフィールドは、独自のパッケージ内でのみアクセスできます。最後に、 フィールドは、同じクラス内へのアクセスを制限します。さらに、対応するアクセス修飾子を持つゲッター メソッドがフィールドごとに提供され、これらの修飾子を使用してカプセル化を管理する方法を示します。

2 番目のスクリプトでは、アクセス修飾子がサブクラスの動作にどのような影響を与えるかを示すために継承が使用されています。の クラスは、さまざまなアクセス レベルのメソッドを定義します。 、 、 package-private、 そして 。の クラスが拡張する そして、 public、 、 そして 方法。の 注釈は、これらのメソッドがスーパークラス内のメソッドをオーバーライドしていることを示すために使用されます。注意してください。 private このメソッドは、独自のクラスの外部からアクセスできないため、サブクラス内でオーバーライドできません。これらの例は、メソッドのアクセシビリティと継承に対するアクセス修飾子の影響を示しており、各修飾子によって課される範囲と制限を理解するのに役立ちます。

Javaのアクセス修飾子の詳細な説明

Java プログラミングの例

public class AccessModifiersExample {
    public String publicField = "Public Field";
    protected String protectedField = "Protected Field";
    String packagePrivateField = "Package-Private Field";
    private String privateField = "Private Field";
    
    public String getPublicField() {
        return publicField;
    }
    
    protected String getProtectedField() {
        return protectedField;
    }
    
    String getPackagePrivateField() {
        return packagePrivateField;
    }
    
    private String getPrivateField() {
        return privateField;
    }
}

継承におけるアクセス修飾子の適用

継承を使用した Java プログラミングの例

public class Parent {
    public void publicMethod() {
        System.out.println("Public method in Parent");
    }
    
    protected void protectedMethod() {
        System.out.println("Protected method in Parent");
    }
    
    void packagePrivateMethod() {
        System.out.println("Package-private method in Parent");
    }
    
    private void privateMethod() {
        System.out.println("Private method in Parent");
    }
}
 
public class Child extends Parent {
    @Override
    public void publicMethod() {
        System.out.println("Public method in Child");
    }
    
    @Override
    protected void protectedMethod() {
        System.out.println("Protected method in Child");
    }
    
    @Override
    void packagePrivateMethod() {
        System.out.println("Package-private method in Child");
    }
}

効果的なカプセル化のためのアクセス修飾子の利用

Java のアクセス修飾子は、データをカプセル化し、オブジェクトの内部状態が不必要に公開されないようにする上で重要な役割を果たします。の アクセス修飾子を使用すると、クラス、メソッド、または変数に他のクラスからアクセスできるようになります。これは、クラスを使用できるようにするために特定のメソッドがパブリックにアクセスできる必要があるクラスの API を定義する場合に便利です。ただし、使いすぎると、 クラス間の結合が密になり、コードの柔軟性が低下する可能性があります。一方、 アクセス修飾子は最も制限が厳しく、同じクラス内でのみアクセスが許可されます。これにより、外部クラスがオブジェクトの内部状態を変更できないことが保証され、明確な境界が維持され、意図しない相互作用のリスクが軽減されます。

の 修飾子は次のバランスをとる そして 、同じパッケージ内およびサブクラスへのアクセスを許可します。これは、サブクラスが親クラスの特定のメソッドまたは変数にアクセスできるようにしたいが、アプリケーションの残りの部分には公開したくない場合がある継承階層で特に役立ちます。の package-private アクセス レベル (修飾子が指定されていない場合のデフォルト) は、同じパッケージ内へのアクセスを制限し、パッケージ レベルでのカプセル化を促進します。これは、アプリケーションの他の部分に公開すべきではないが、同じパッケージ内のクラス間で共有する必要がある内部実装に役立ちます。適切なアクセス修飾子を慎重に選択することで、開発者はよりモジュール化され、保守しやすく、安全なコードを作成できます。

  1. Java で最も制限的なアクセス修飾子は何ですか?
  2. 最も制限的なアクセス修飾子は次のとおりです。 、同じクラス内でのみアクセスを許可します。
  3. いつ使用すればよいですか アクセス修飾子?
  4. 使用 同じパッケージ内およびサブクラスによるメンバーへのアクセスを許可したい場合。
  5. は何ですか アクセスレベルとはどういう意味ですか?
  6. (デフォルト、修飾子なし) は、メンバーがその独自のパッケージ内でのみアクセスできることを意味します。
  7. できる? メソッドはオーバーライドされますか?
  8. いや このメソッドは独自のクラスの外部からアクセスできないため、オーバーライドできません。
  9. 違いは何ですか そして ?
  10. 任意のクラスからのアクセスを許可しますが、 同じパッケージ内およびサブクラスによるアクセスを許可します。
  11. にアクセスすることは可能ですか? 別のパッケージのメンバーですか?
  12. はい。ただし、サブクラスによる継承を通じてアクセスした場合に限ります。
  13. いつ使用するか 修飾子?
  14. 使用 他のクラスからメンバーにアクセスできるようにしたい場合。
  15. どうやって カプセル化に役立ちますか?
  16. 同じクラス内へのアクセスを制限し、内部状態と実装の詳細を隠すのに役立ちます。
  17. できる メンバーはサブクラスからアクセスできますか?
  18. はい。ただし、サブクラスが同じパッケージ内にある場合に限ります。

Java アクセス修飾子の使用のまとめ

結論として、Java アクセス修飾子は、クラスとそのメンバーの可視性とアクセシビリティを定義するために不可欠なツールです。を使用することで 、 、 、 そして private プログラムのさまざまな部分が相互に持つアクセス レベルを適切に制御できます。これにより、カプセル化とセキュリティが強化されるだけでなく、適切に構造化されたモジュール型コードベースの維持にも役立ちます。これらの修飾子を正しく理解し、適用することは、Java 開発者にとって重要なスキルです。