Java 함수의 액세스 한정자는 공개, 보호, 기본 및 비공개를 포함하여 함수의 가시성 범위를 결정합니다. 외부 클래스 내부의 클래스로서 익명의 내부 클래스는 외부 클래스의 비공개가 아닌 모든 멤버에 액세스할 수 있으므로 해당 함수에 대한 액세스 권한은 외부 클래스의 함수 액세스 권한과 관련됩니다.
Java 함수의 액세스 한정자와 익명 내부 클래스 간의 관계
Java 함수의 액세스 한정자는 함수에 액세스할 수 있는 위치를 결정합니다. 이러한 수정자는 다음과 같습니다.
익명 내부 클래스 는 이름을 지정하지 않고 클래스 내에서 정의되는 Java의 클래스입니다. 일반적으로 이벤트 핸들러나 비교기 구현과 같은 일회용 개체를 만드는 데 사용됩니다.
익명 내부 클래스는 외부 클래스의 비공개 멤버가 아닌 모든 멤버에 액세스할 수 있습니다. 따라서 익명 내부 클래스에 있는 함수의 액세스 권한은 외부 클래스에 있는 함수의 액세스 권한과 관련됩니다. 예:
public class OuterClass { private int privateField = 1; protected int protectedField = 2; int defaultField = 3; public int publicField = 4; public void someMethod() { new Runnable() { @Override public void run() { // 内部类可以访问所有非私有成员变量 System.out.println(protectedField); System.out.println(defaultField); System.out.println(publicField); } }.run(); } }
위 코드에서 익명 내부 클래스의 함수는 protectedField
, defaultField
및 publicField
에 액세스할 수 있습니다. 비공개. protectedField
、defaultField
和 publicField
,因为它们不是私有的。
实战案例:
假设我们有一个 EventProcessor
接口,它定义了一个 process()
方法。我们想创建一个匿名内部类来实现 process()
方法,该方法可以访问外部类中的数据。
public class Main { private String data = "Hello"; public static void main(String[] args) { EventProcessor processor = new EventProcessor() { @Override public void process() { // 匿名内部类可以访问外部类中的 data 成员变量 System.out.println(data); } }; processor.process(); } }
在这种情况下,只要 data
process()
메서드를 정의하는 EventProcessor
인터페이스가 있다고 가정합니다. 우리는 외부 클래스의 데이터에 액세스할 수 있는 process()
메서드를 구현하는 익명의 내부 클래스를 만들고 싶습니다. 🎜rrreee🎜이 경우 data
멤버 변수가 private이 아닌 한 익명 내부 클래스의 함수는 동일한 패키지 또는 하위 패키지에서 액세스할 수 있습니다. 🎜위 내용은 Java 함수 액세스 수정자와 익명 내부 클래스 간의 관계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!