在提供的代码片段中,您有嵌套类 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 中的outer() 方法返回 OuterClass 的封闭实例,然后您可以将其与原始 OuterClass 实例进行比较。
通过实验,发现持有引用的字段外部类具有包级访问权限。这意味着您可以在技术上通过反射访问外部类:
Field field = InnerClass.class.getDeclaredField("this"); field.setAccessible(true); OuterClass outer = (OuterClass) field.get(inner);
注意: Java 语言规范不鼓励这种方法,并且在不同的 Java 版本中可能不可靠。
以上是Java中如何从内部类访问外部类?的详细内容。更多信息请关注PHP中文网其他相关文章!