Java 内部类是否可以访问外部类实例变量?

Java 内部类是否可以访问外部类实例变量?,java,Java,假设我有以下代码: class Outer { int n; class Inner { } } 内部类型的对象是否可以访问其外部对象的实例变量n?(当我说its时,我指的是与其关联的外部对象。)我理解在内部类的方法中,您可以访问外部类实例变量,也可以在主体中访问外部类实例变量(例如,内部的实例变量可以初始化为外部的instance变量的值),但是有可能更直接地访问外部实例变量吗?例如,如果inner是inner类型的对象,那么在上面的代码中是否有类似inner.n的内容 对

假设我有以下代码:

class Outer {
   int n;
   class Inner {
   }
}
内部类型的对象是否可以访问其外部对象的实例变量n?(当我说its时,我指的是与其关联的外部对象。)我理解在内部类的方法中,您可以访问外部类实例变量,也可以在主体中访问外部类实例变量(例如,内部的实例变量可以初始化为外部的instance变量的值),但是有可能更直接地访问外部实例变量吗?例如,如果inner是inner类型的对象,那么在上面的代码中是否有类似inner.n的内容


对不起,这段文字:基本上是,如果inner是inner类型的对象,那么根据上面的代码,是否有类似inner.n的内容?

当然。非静态内部类是以允许它们访问相应外部类中的任何变量的方式生成的(这是产生一些安全问题的原因)。非静态内部类的实例只能在外部类的给定实例中生成,并持有对外部类的引用,该引用允许它们访问外部类的任何变量

有关此主题的更多信息,请阅读java语言参考

内部类型的对象是否可以访问其外部对象的实例变量n

是的,您也可以访问该类的其他实例的字段,即使它们是私有的

我知道,在内部类的方法中,您可以访问外部类实例变量,也可以访问主体内的实例变量(例如,内部的实例变量可以初始化为外部的instance变量的值),但是否可以更直接地访问外部实例变量?例如,如果inner是inner类型的对象,那么在上面的代码中是否有类似inner.n的内容

无法从另一个类访问内部类可见的字段。只有内部类和外部类可以访问它们,除非这些字段是公共的或可以通过普通的访问修饰符访问

基本上,如果inner是inner类型的对象,那么在上面的代码中是否有类似inner.n的东西


内部没有名为
n
的字段,因此即使通过反射,也无法使用该名称访问它。您可以访问内部类中的
Outer.this.n
,您可以使用反射获取外部类的实例并获取其
n
字段。

这不是一个很难自己尝试的示例xD