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 중국어 웹사이트의 기타 관련 기사를 참조하세요!