수색…


통사론

  • 공용 유형 이름 [= 값];
  • 개인 유형 이름 [= 값];
  • 보호 된 유형 이름 [= 값];
  • 유형 이름 [= 값];
  • public class name {
  • 클래스 이름 {

비고

자바 튜토리얼 :

액세스 수준 수정자는 다른 클래스가 특정 필드를 사용하거나 특정 메서드를 호출 할 수 있는지 여부를 결정합니다. 액세스 제어에는 두 가지 레벨이 있습니다.

  • 최상위 public 또는 패키지 개인 (명시 적 수정 자 없음).
  • 멤버 레벨 - public , private , protected 또는 package-private (명시 적 수정 자 없음).

클래스는 수정 자 public 으로 선언 할 수 있습니다.이 경우 해당 클래스는 모든 클래스의 모든 곳에서 볼 수 있습니다. 클래스에 수정자가 없으면 (기본값, package-private 이라고도 함) 자체 패키지 내에서만 볼 수 있습니다.

멤버 레벨에서 public 수정 자나 수정 자 없음 ( package-private )을 최상위 클래스와 동일한 의미로 사용할 수 있습니다. 회원의 경우 privateprotected 라는 두 가지 액세스 수정자가 있습니다. private 한정자는 멤버가 자신의 클래스에서만 액세스 될 수 있도록 지정합니다. protected 수식자는, 멤버가 독자적인 패키지 ( package-private 와 같이) 내에서 액세스 할 수있는 것 외, 또 다른 패키지 내의 그 클래스의 서브 클래스에 의해서만 액세스 할 수 있도록 (듯이) 지정합니다.

다음 표는 각 수정 자에서 허용하는 멤버에 대한 액세스를 보여줍니다.

액세스 수준 :

모디파이어 수업 꾸러미 아강 세계
public 와이 와이 와이 와이
protected 와이 와이 와이
수정 자 없음 와이 와이
private 와이

인터페이스 구성원

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

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

    public class X {
    }

    class Y {
    }
}

인터페이스 멤버는 public 키워드가 생략 된 경우에도 공개 상태로 표시됩니다. 따라서 foo() , bar() , TEXT , ANSWER , XY 는 공용으로 표시됩니다. 그러나 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 visibility는 변수가 클래스에 의해서만 액세스 될 수있게합니다. 그들은 종종 public getter 및 setters 함께 사용됩니다.

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());
    }
}

패키지 가시성

한정자가 없으면 기본값은 패키지 표시입니다. Java Documentation에서 "[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 멤버 중 하나에 액세스하려고 시도합니다.

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 (키워드 한 번에 두 키워드) 수정자가 있었지만 해당 패키지의 클래스에 대해 private이되었습니다. 그러나 이것은 Java 1.0의 릴리스에서 제거되었습니다 .



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow