> Java > java지도 시간 > 다른 패키지의 서브클래스가 슈퍼클래스의 보호된 멤버에 직접 액세스할 수 있습니까?

다른 패키지의 서브클래스가 슈퍼클래스의 보호된 멤버에 직접 액세스할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-07 16:30:15
원래의
715명이 탐색했습니다.

Can Subclasses in Different Packages Directly Access a Superclass's Protected Members?

Java의 보호된 액세스 이해

Java에서 protected 한정자는 동일한 패키지 내의 특정 멤버 및 하위 클래스에 대한 액세스를 허용하기 위한 것입니다. 다른 패키지에서는. 그러나 서브클래스 외부의 슈퍼클래스 인스턴스에서 보호된 멤버에 액세스할 때 일반적인 오해가 발생합니다.

다음 예를 고려하세요.

// Class A
package package1;
public class A {
    protected int protectedInt = 1;
}

// Class C
package package2;
import package1.A;
public class C extends A {
    public void go() {
        A a = new A();
        System.out.println(a.publicInt);
        System.out.println(a.protectedInt); // Eclipse underlines this line
    }
}
로그인 후 복사

Eclipse는 a. protectedInt에 액세스하여 표시되지 않는다고 주장합니다. 이는 Java의 protected 정의와 모순되는 것 같습니다. "protected 한정자는 멤버가 자체 패키지(package-private과 마찬가지로) 내에서만 액세스할 수 있고 또한 다른 패키지에 있는 해당 클래스의 하위 클래스에서만 액세스할 수 있음을 지정합니다."

오해 해결

이 동작을 이해하는 열쇠는 보호됨의 정의에 있습니다. 하위 클래스. 특히 보호 멤버에 대한 액세스는 하위 클래스 본문 내에서만 허용됩니다.

따라서 보호 멤버 protectedInt는 클래스 C 내에서 액세스할 수 있지만 클래스 C 자체의 인스턴스 또는 클래스 C의 하위 클래스 인스턴스에 대해서만 액세스할 수 있습니다. . 동일한 패키지 내에 있더라도 슈퍼클래스의 인스턴스에서 직접 액세스할 수 없습니다.

go 메소드의 오류를 해결하려면 대신 클래스 C의 인스턴스를 생성해야 합니다. 클래스 A:

C c = new C();
System.out.println(c.publicInt);
System.out.println(c.protectedInt);
로그인 후 복사

이렇게 하면 하위 클래스 인스턴스를 통해 보호된 멤버에 올바르게 액세스할 수 있습니다.

위 내용은 다른 패키지의 서브클래스가 슈퍼클래스의 보호된 멤버에 직접 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿