Java 什么';这是OuterClass.this.someMethod()背后的基本原理吗?

Java 什么';这是OuterClass.this.someMethod()背后的基本原理吗?,java,inner-classes,Java,Inner Classes,以下是合法的(据我所知): 虽然我理解正在发生的事情和结果是什么,但我不理解为什么这是可以的 我对如何通过静态成员语法访问outer类的实例感到困惑:outer。这个this,对outer的特定实例的引用,不应该是静态的吗?是语法相同但功能不同,还是这是一个静态字段 换句话说,该代码使用class.field语法访问外部类的实例,我一直将其与静态成员关联。然而,如果它是一个类的一个特定实例,它怎么可能是静态的?根据该逻辑,不同的Outer实例将从对象返回不同的Outer对象。。。这不是静态的。。

以下是合法的(据我所知):

虽然我理解正在发生的事情和结果是什么,但我不理解为什么这是可以的

我对如何通过静态成员语法访问outer类的实例感到困惑:
outer。这个
this
,对outer的特定实例的引用,不应该是静态的吗?是语法相同但功能不同,还是
这是一个静态字段


换句话说,该代码使用
class.field
语法访问外部类的实例,我一直将其与静态成员关联。然而,如果它是一个类的一个特定实例,它怎么可能是静态的?根据该逻辑,不同的Outer实例将从
对象返回不同的Outer对象。。。这不是静态的。。。我的大脑很痛。

在您的内部类中,
引用了您的
内部
实例,因此您需要一种方法来引用外部实例,或者外部实例的字段,以防它们与内部实例中的字段冲突。因此,这个语法指示您所引用的类的哪个实例,它不是静态访问


请参见内部类中的

引用内部
的实例,因此需要一种方法来引用外部实例或外部实例的字段,以防它们与内部实例中的字段冲突。因此,这个语法指示您所引用的类的哪个实例,它不是静态访问


请参见

实际上不是静态的。这只是一种用于区分同一范围内不同对象的符号


如果没有这个符号,就无法从
内部对象获取对
外部对象的引用。将
Outer.this.someMethod()
替换为
this.someMethod()
,您会得到一个编译错误,因为
this
本身引用的是
内部的
对象(它没有
someMethod
方法)。

这实际上不是静态的。这只是一种用于区分同一范围内不同对象的符号


如果没有这个符号,就无法从
内部对象获取对
外部对象的引用。将
Outer.this.someMethod()
替换为
this.someMethod()
,您会得到一个编译错误,因为
this
本身引用的是
内部的
对象(它没有
someMethod
方法)。

这引用的是当前对象。静态字段/方法作为一个整体属于类。 在内部类中,这将表示内部类对象。此.someMethod()将给出错误,因为内部类中不存在someMethod()。因此,如果内部类字段和外部类字段相同,则需要一种区分它们的方法。
Outer.this.someMethod()~引用外部类的someMethod()函数

这是指当前对象。静态字段/方法作为一个整体属于类。 在内部类中,这将表示内部类对象。此.someMethod()将给出错误,因为内部类中不存在someMethod()。因此,如果内部类字段和外部类字段相同,则需要一种区分它们的方法。 Outer.this.someMethod()~引用外部类的someMethod()函数

class Outer {
    void someMethod() {
        // do something
    }

    class Inner {
        void innerMethod() {
            Outer.this.someMethod();
        }
    }
}