首页 >Java >java教程 >Java中如何从内部类访问外部类?

Java中如何从内部类访问外部类?

Barbara Streisand
Barbara Streisand原创
2024-12-14 11:17:11771浏览

How Can I Access the Outer Class from an Inner Class in Java?

从内部类引用外部类

在提供的代码片段中,您有嵌套类 OuterClass 和 InnerClass。您的目标是从内部类(InnerClass)的实例访问父类(OuterClass),而不修改内部类的代码。

使用 OuterClass.this

在 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 中的outer() 方法返回 OuterClass 的封闭实例,然后您可以将其与原始 OuterClass 实例进行比较。

包级访问(不推荐)

通过实验,发现持有引用的字段外部类具有包级访问权限。这意味着您可以在技术上通过反射访问外部类:

Field field = InnerClass.class.getDeclaredField("this");
field.setAccessible(true);
OuterClass outer = (OuterClass) field.get(inner);

注意: Java 语言规范不鼓励这种方法,并且在不同的 Java 版本中可能不可靠。

以上是Java中如何从内部类访问外部类?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn