programing

Java에서 기본 액세스 수식자는 무엇입니까?

javaba 2022. 11. 25. 21:01
반응형

Java에서 기본 액세스 수식자는 무엇입니까?

메서드 또는 인스턴스 변수의 기본 접근 수식자는 무엇입니까?

예를 들어 다음과 같습니다.

package flight.booking;

public class FlightLog
{
    private SpecificFlight flight;

    FlightLog(SpecificFlight flight)
    {
        this.flight = flight;
    }
}

이 컨스트럭터의 액세스 수식자는 보호되고 있습니까, 아니면 패키지화되어 있습니까?내의 (「」)는 사용할 수 ?flight.booking스컨컨 터트?

Java 문서에서

클래스에 수식자(기본값, package-private라고도 함)가 없는 경우 해당 클래스는 자체 패키지 내에서만 표시됩니다(패키지는 관련 클래스의 그룹입니다.이러한 클래스는 나중에 학습합니다).

member level , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , .no modifier (private-private)는 최상위 클래스입니다.

자세한 내용은 이쪽()Which I wrote recently에서 확인하실 수 있습니다.

http://codeinventions.blogspot.com/2014/09/default-access-modifier-in-java-or-no.html

문서부터:

Access Levels
Modifier        Class    Package    Subclass    World
-----------------------------------------------------
public           Y        Y          Y           Y
protected        Y        Y          Y           N
(Default)        Y        Y          N           N
private          Y        N          N           N

상황에 따라 다르죠.

클래스 내일 경우:

class example1 {

    int a = 10; // This is package-private (visible within package)

    void method1() // This is package-private as well.
    {
        -----
    }
}

인터페이스 내에 있는 경우:

interface example2 {

    int b = 10; // This is public and static.
    void method2(); // This is public and abstract
}

기본 액세스 수식자는 package-private입니다. 동일한 패키지에서만 표시됨

여기 코드 샘플이 있습니다.이 샘플은 대략적으로 요약할 수 있습니다.아래 외에도 다른 패키지의 기본값에 액세스할 수 없는 방법이 하나 더 있습니다.

서브클래스를 서브클래스로 분류하는 클래스가 다른 패키지에 포함되어 있는 경우는 서브클래스에서 디폴트에 액세스 할 수 없지만, 서브클래스가 같은 패키지에 포함되어 있는 경우는 디폴트에 액세스 할 수 있습니다.

package main;

public class ClassA {
    private int privateVar;
    public int publicVar;
    int defaultVar;
}

package main;

public class ClassB {
    public static void main(String[] args) {
        ClassA a = new ClassA();
        int v1 = a.publicVar;   // Works
        int v2 = a.defaultVar;  // Works
        int v3 = a.privateVar;  // Doesn't work

    }
}

package other;

public class ClassC {
    public static void main(String[] args) {
        ClassA a = new ClassA();
        int v1 = a.publicVar;   // Works
        int v2 = a.defaultVar;  // Doesn't work
        int v3 = a.privateVar;  // Doesn't work
    }
}

는 '다보다'입니다.package같은 패키지의 코드만이 이 컨스트럭터를 호출할 수 있습니다.

네, 같은 패키지로 보입니다.이 패키지 외부에 있는 어떤 것도 이 패키지에 액세스할 수 없습니다.

디폴트 액세스 수식자는 package-private(즉, DEFAULT)로, 같은 패키지에서만 표시됩니다.

컨스트럭터의 액세스 수식자는 package-private(기본값)입니다.클래스를 공개한다고 선언했으므로 어디에서나 클래스가 표시되지만 생성자는 표시되지 않습니다.컨스트럭터는 패키지에만 표시됩니다.

package flight.booking;

public class FlightLog // Public access modifier
{
    private SpecificFlight flight;

    FlightLog(SpecificFlight flight) // Default access modifier
    {
        this.flight = flight;
    }
}

클래스에 생성자를 쓰지 않으면 컴파일러는 클래스의 동일한 액세스 수식자를 가진 기본 생성자를 생성합니다.다음 예제에서는 컴파일러가 퍼블릭액세스 수식자를 가진 기본 컨스트럭터를 생성합니다(클래스와 동일).

package flight.booking;

public class FlightLog // Public access modifier
{
    private SpecificFlight flight;
}

기본 액세스 수식자 - 클래스에 수식자(기본값, package-private라고도 함)가 없는 경우 해당 패키지만 표시됩니다(패키지는 관련 클래스의 그룹입니다).

아니요, 다른 패키지에 대한 기본 액세스 수준을 호출할 수 없습니다.하지만 패키지 내 접근권은 있습니다.자세한 내용은 이 링크를 참조하십시오.

이 컨스트럭터의 액세스 수식자는 보호되고 있습니까, 아니면 패키지화되어 있습니까?

암시적으로 생성자 액세스 수식자는 클래스의 액세스 수식자가 될 것입니다.당신의 클래스가 공공 접근권을 가지고 있기 때문에, 컨스트럭터는 암묵적으로 공공 접근권을 갖게 될 것이다.

OCA Java SE 7 Programmer I 이라는 책에서 다음과 같이 기술되어 있습니다.

명시적 접근 수식자를 사용하지 않고 정의된 클래스의 멤버는 패키지 접근성(기본 접근성이라고도 함)으로 정의됩니다.패키지 액세스 권한을 가진 구성원은 동일한 패키지에 정의된 클래스 및 인터페이스에만 액세스할 수 있습니다.

언급URL : https://stackoverflow.com/questions/16164902/what-is-the-default-access-modifier-in-java

반응형