>Java >java지도 시간 >Java의 다른 패키지에서 슈퍼클래스의 보호된 멤버에 액세스할 수 없는 이유는 무엇입니까?

Java의 다른 패키지에서 슈퍼클래스의 보호된 멤버에 액세스할 수 없는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-07 20:45:16732검색

Why Can't I Access a Superclass's Protected Member from a Different Package in Java?

Java의 Protected 수정자 및 접근성 제한 이해

Java의 protected 액세스 수정자는 종종 의도된 사용법과 관련해 혼란을 야기합니다. 이러한 인스턴스 중 하나는 다른 패키지에서 슈퍼클래스의 보호된 멤버에 액세스하려고 할 때 발생합니다.

제공된 예제에서 클래스 A에는 보호된 액세스로 선언된 인스턴스 변수 protectedInt가 포함되어 있습니다. Oracle 설명서에 따르면 보호된 멤버는 동일한 패키지 또는 다른 패키지에 있는 해당 클래스의 하위 클래스 내에서 액세스할 수 있어야 합니다. 그러나 클래스 C(클래스 A 확장)가 protectedInt에 액세스하려고 하면 Eclipse는 "A.protectedInt"가 표시되지 않음 오류를 보고합니다.

이 오류의 원인은 protected 액세스 한정자의 올바른 해석에 있습니다. 보호된 액세스는 자신이 속한 패키지에 관계없이 해당 클래스의 하위 클래스 내에서만 이를 선언하는 클래스 내에서 보호된 멤버를 사용하는 것을 허용합니다.

설명을 위해 이 코드 조각은 의도한 대로 작동합니다.

C c = new C();
System.out.println(c.publicInt);
System.out.println(c.protectedInt);

c 유형이 A의 하위 클래스인 C의 인스턴스이기 때문입니다. 그러나 c가 A의 인스턴스인 경우 protectedInt에 액세스하는 것은 불가능합니다. 가능합니다.

이 동작은 JLS(Java 언어 사양) 섹션 6.6.2에 부합합니다. 이 섹션에서는 보호된 멤버가 서브클래스 내에서만 액세스할 수 있으며 필드 액세스 또는 메서드 호출 표현식을 통해 액세스하는 경우 객체의 유형은 하위 클래스 또는 추가 하위 클래스여야 합니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.