문제:
C가 A를 확장하는 두 클래스 A와 C를 생각해 보세요. A는 인스턴스 변수를 protected int protectedInt = 1로 선언합니다. 보호된 멤버가 있어야 한다는 기대에도 불구하고 다른 패키지의 하위 클래스 내에서 액세스할 수 있는 Eclipse에서는 클래스 C의 protectedInt에 대한 액세스가 표시되지 않는 것으로 표시됩니다.
답변:
Java protected 수정자는 해당 클래스 내의 멤버에 대한 액세스를 허용합니다. 자신의 패키지와 하위 클래스별로 액세스할 수 있지만 하위 클래스의 인스턴스를 통해 액세스하는 경우에만 해당됩니다. 이는 보호된 액세스의 범위가 보호된 멤버가 선언된 클래스가 아닌 하위 클래스 유형으로 지정되기 때문입니다.
JLS(Java 언어 사양)에 따르면 "접근은 하위 클래스의 본문 내에서만 허용됩니다. C의 S." 즉, C가 A를 확장하더라도 A 인스턴스에서 protectedInt에 직접 액세스하는 것은 허용되지 않습니다.
해결책:
하위 클래스의 protected 멤버에 액세스하려면 , 하위 클래스 유형을 사용해야 합니다. 예를 들어 다음 코드가 유효합니다.
C c = new C(); System.out.println(c.protectedInt);
이 경우 서브클래스(C)의 인스턴스를 통해 액세스가 이루어지므로 보호된 멤버가 표시됩니다.
위 내용은 다른 패키지에서 Java 하위 클래스의 보호된 멤버에 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!