제공된 코드 조각에는 OuterClass 및 InnerClass 중첩 클래스가 있습니다. 내부 클래스의 코드를 수정하지 않고 내부 클래스(InnerClass)의 인스턴스에서 상위 클래스(OuterClass)에 액세스하려고 합니다.
InnerClass 내에서 다음을 사용할 수 있습니다. OuterClass.this 표현식은 OuterClass의 둘러싸는 인스턴스를 참조합니다. 이 표현식은 둘러싸는 인스턴스를 나타내기 위해 this 키워드를 한정합니다. 코드의 수정된 버전은 다음과 같습니다.
public class OuterClass { public class InnerClass { private String name = "Peakit"; public OuterClass outer() { return OuterClass.this; } } public static void main(String[] args) { OuterClass outer = new OuterClass(); InnerClass inner = outer.new InnerClass(); OuterClass anotherOuter = inner.outer(); if(anotherOuter == outer) { System.out.println("Was able to reach out to the outer object via inner !!"); } else { System.out.println("No luck :-( "); } } }
이 코드를 실행하면 InnerClass의 external() 메서드는 OuterClass의 바깥쪽 인스턴스를 반환하며, 이를 원본 OuterClass 인스턴스와 비교할 수 있습니다.
실험을 통해 다음 항목에 대한 참조를 보유하는 필드가 발견되었습니다. 외부 클래스에는 패키지 수준 액세스 권한이 있습니다. 이는 리플렉션을 통해 기술적으로 외부 클래스에 액세스할 수 있음을 의미합니다.
Field field = InnerClass.class.getDeclaredField("this"); field.setAccessible(true); OuterClass outer = (OuterClass) field.get(inner);
참고: 이 접근 방식은 Java 언어 사양에 의해 권장되지 않으며 다양한 Java 버전에서는 안정적이지 않을 수 있습니다.
위 내용은 Java의 내부 클래스에서 외부 클래스에 어떻게 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!