OuterClass.this.someMethod()背后的理由是什么?

时间:2015-07-01 14:08:14

标签: java inner-classes

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

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

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

虽然我明白发生了什么以及结果是什么,但我不明白为什么会这样。

我对如何通过静态成员语法访问外部类的实例感到困惑:Outer.this不应该this,对特定Outer实例的引用,是什么但是静态的?语法是否相同但功能是否相同,或者this某种方式是外部的静态字段?

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

3 个答案:

答案 0 :(得分:4)

this确实不是静态的。这只是一个用于区分生活在同一范围内的不同对象的符号。

如果没有这种表示法,就无法从Outer对象获取对Inner对象的引用。将Outer.this.someMethod()替换为this.someMethod(),您会收到编译错误,因为this本身是指Inner对象(没有someMethod方法)。< / p>

答案 1 :(得分:3)

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

请参阅https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

答案 2 :(得分:0)

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