サーチ…


構文

  • パブリックタイプ名[=値];
  • プライベートタイプ名[=値];
  • 保護された型名[=値];
  • タイプ名[=値];
  • パブリッククラス名{
  • クラス名{

備考

Javaチュートリアルから:

アクセス・レベル修飾子は、他のクラスが特定のフィールドを使用できるか、特定のメソッドを呼び出すことができるかどうかを決定します。アクセス制御には2つのレベルがあります。

  • トップレベル - public 、またはパッケージ - プライベート (明示的修飾子なし)。
  • メンバレベル - publicprivateprotectedpackage-private (明示的修飾子なし)。

クラスは、修飾子publicで宣言することができます。この場合、そのクラスはすべてのクラスすべてで可視です。クラスに修飾子がない場合(デフォルトはpackage-privateとも呼ばれます )、それはそれ自身のパッケージ内でしか見ることができません。

メンバレベルでは、トップレベルクラスの場合と同様にpublic修飾子を使用することも、同じ修飾子を使用しない( package-private )こともできます。メンバーには、さらに2つのアクセス修飾子、 privateprotectedます。 private修飾子は、そのメンバーが独自のクラスでのみアクセス可能であることを指定します。 protected修飾子は、そのメンバが( package-privateのように )それ自身のパッケージ内だけでアクセスでき、さらにそのクラスのサブクラスによって別のパッケージにアクセスできることを指定します。

次の表は、各修飾子で許可されているメンバーへのアクセスを示しています。

アクセスレベル:

モディファイアクラスパッケージサブクラス世界
public Y Y Y Y
protected Y Y Y N
修飾子なし Y Y N N
private Y N N N

インタフェースメンバ

public interface MyInterface {
    public void foo();
    int bar();

    public String TEXT = "Hello";
    int ANSWER = 42;

    public class X {
    }

    class Y {
    }
}

publicキーワードが省略されていても、インターフェースメンバーは常に公開されます。したがって、 foo()bar()TEXTANSWERX 、およびY両方が公開されています。 MyInterfaceは公開されているため、どこからでもアクセスできますが、 MyInterfaceパッケージの可視性があった場合、そのメンバーは同じパッケージ内からのみアクセスできます。

一般公開

クラス、パッケージ、およびサブクラスに表示されます。

Testクラスの例を見てみましょう。

public class Test{
    public int number = 2;

    public Test(){

    }
}

では、クラスのインスタンスを作成しようとします。この例では、 publicいるためnumberアクセスできます。

public class Other{
    
    public static void main(String[] args){
        Test t = new Test();
        System.out.println(t.number);
    }

}

私的な可視性

private可視性は、そのクラスによってのみ変数にアクセスできるようにします。彼らはしばしばpublicゲッターやセッター一緒に使用されます。

class SomeClass {
    private int variable;

    public int getVariable() {
        return variable;
    }

    public void setVariable(int variable) {
        this.variable = variable;
    }
}

public class SomeOtherClass {
    public static void main(String[] args) {
        SomeClass sc = new SomeClass();
        
        // These statement won't compile because SomeClass#variable is private:
        sc.variable = 7;
        System.out.println(sc.variable);

        // Instead, you should use the public getter and setter:
        sc.setVariable(7);
        System.out.println(sc.getVariable());
    }
}

パッケージの可視性

修飾子を使用しない場合のデフォルトは、package visibilityです。 Javaドキュメンテーションから、 「[package visibility]は、クラスと同じパッケージ内のクラス(その親に関係なく)がメンバにアクセスできるかどうかを示します。 javax.swingこの例では、

package javax.swing;
public abstract class JComponent extends Container … {
    …
    static boolean DEBUG_GRAPHICS_LOADED;
    …
}

DebugGraphicsは同じパッケージに含まれているため、 DEBUG_GRAPHICS_LOADEDにアクセスできます。

package javax.swing;
public class DebugGraphics extends Graphics {
    …
    static {
        JComponent.DEBUG_GRAPHICS_LOADED = true;
    }
    …
}

この記事では、このトピックの背景について説明します。

保護された可視性

保護された可視性の原因は、このメンバーがそのサブクラスとともにパッケージで可視であることを意味します。

例として:

package com.stackexchange.docs;
public class MyClass{
    protected int variable; //This is the variable that we are trying to access
    public MyClass(){
        variable = 2;
    };
}

次に、このクラスを拡張し、 protectedメンバーの1つにアクセスしようとします。

package some.other.pack;
import com.stackexchange.docs.MyClass;
public class SubClass extends MyClass{
    public SubClass(){
        super();
        System.out.println(super.variable);
    }
}

protectedメンバーに同じパッケージからアクセスしている場合は、そのメンバーを拡張せずにアクセスすることもできます。

この修飾子はクラスのメンバーでのみ動作し、クラス自体では動作しないことに注意してください。

クラスメンバアクセス修飾子の概要

アクセス修飾子可視性継承
プライベートクラスのみ継承することはできません
修飾子 /パッケージなし パッケージ内パッケージのサブクラスの場合に使用可能
保護されたパッケージ内サブクラスで利用可能
パブリックどこにでもサブクラスで利用可能

メソッドや変数に適用してパッケージ外のサブクラスからアクセスできるようにするprivate protected (一度に両方のキーワード)修飾子がありましたが、そのパッケージ内のクラスに対して非公開にしました。ただし、これはJava 1.0のリリースで削除されました



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow