1概要

このチュートリアルでは、アクセスレベルをクラス、変数、メソッド、およびコンストラクタに設定するために使用されるJavaのアクセス修飾子について説明します。

  • 簡単に言うと、4つのアクセス修飾子があります。**

    public



    private



    protected

    および

    default

    (キーワードなし)。

始める前に、トップレベルクラスが

public

または

default

アクセス修飾子だけを使用できることに注意しましょう。メンバーレベルでは、4つすべてを使用できます。


2デフォルト

キーワードを明示的に使用しない場合、Javaは特定のクラス、メソッド、またはプロパティへの

default

アクセスを設定します。デフォルトのアクセス修飾子は

package-private

とも呼ばれます。つまり、

すべてのメンバーは同じパッケージ内で見えますが

他のパッケージからはアクセスできません。

package com.baeldung.accessmodifiers;

public class SuperPublic {
    static void defaultMethod() {
        ...
    }
}


defaultMethod()

は、同じパッケージの別のクラスでアクセス可能です。

package com.baeldung.accessmodifiers;

public class Public {
    public Public() {
        SuperPublic.defaultMethod();//Available in the same package.
    }
}

ただし、他のパッケージでは利用できません。


3パブリック


public

キーワードをクラス、メソッド、またはプロパティに追加すると、それを全世界で利用できるようにします。これは最も制限の少ないアクセス修飾子です。

package com.baeldung.accessmodifiers;

public class SuperPublic {
    public static void publicMethod() {
        ...
    }
}


publicMethod()

は別のパッケージで利用可能です。

package com.baeldung.accessmodifiers.another;

import com.baeldung.accessmodifiers.SuperPublic;

public class AnotherPublic {
    public AnotherPublic() {
        SuperPublic.publicMethod();//Available everywhere. Let's note different package.
    }
}


4プライベート


private

キーワード

を持つすべてのメソッド、プロパティ、またはコンストラクタは、同じクラスからのみアクセス可能です

。これは最も制限的なアクセス修飾子であり、カプセル化の概念の核心です。すべてのデータは外界から隠されています。

package com.baeldung.accessmodifiers;

public class SuperPublic {
    static private void privateMethod() {
        ...
    }

     private void anotherPrivateMethod() {
         privateMethod();//available in the same class only.
    }
}


5保護された


パブリック

アクセスレベルと

プライベートアクセスレベルの間には、

protected__アクセス修飾子があります。


protected

キーワードを使用してメソッド、プロパティ、またはコンストラクタを宣言すると、同じパッケージから(

package-private

アクセスレベルと同様に)、さらにそのクラスのすべてのサブクラスからメンバにアクセスできます。パッケージ:

package com.baeldung.accessmodifiers;

public class SuperPublic {
    static protected void protectedMethod() {
        ...
    }
}


protectedMethod()

はサブクラスで利用可能です(パッケージに関係なく)。

package com.baeldung.accessmodifiers.another;

import com.baeldung.accessmodifiers.SuperPublic;

public class AnotherSubClass extends SuperPublic {
    public AnotherSubClass() {
        SuperPublic.protectedMethod();//Available in subclass. Let's note different package.
    }
}


6. 比較

以下の表は、利用可能なアクセス修飾子をまとめたものです。使用されているアクセス修飾子に関係なく、クラスは常にそのメンバーにアクセスできることがわかります。

| ============================================
|修飾子|クラス|パッケージ|サブクラス|ワールド
a |
……
パブリック
……

| Y | Y | Y | Y
a |
……
保護された
……

| Y | Y | Y | N
a |
……
デフォルト
……

| Y | Y | N | N
a |
……
非公開
……

| Y | N | N | N | ============================================


7. 結論

この短い記事では、Javaのアクセス修飾子について説明しました。

悪用を防ぐために、特定のメンバーに対してできるだけ制限の厳しいアクセスレベルを使用することをお勧めします。そうしない正当な理由がない限り、

private

アクセス修飾子を常に使用するべきです。


パブリック

アクセスレベルは、メンバーがAPIの一部である場合にのみ使用されるべきです。

いつものように、コード例はhttps://github.com/eugenp/tutorials/tree/master/core-java-lang-oop[over on Github]から入手できます。