以下是合法的(据我所知):
class Outer {
void someMethod() {
// do something
}
class Inner {
void innerMethod() {
Outer.this.someMethod();
}
}
}
虽然我明白发生了什么以及结果是什么,但我不明白为什么会这样。
我对如何通过静态成员语法访问外部类的实例感到困惑:Outer.this
不应该this
,对特定Outer实例的引用,是什么但是静态的?语法是否相同但功能是否相同,或者this
某种方式是外部的静态字段?
换句话说,该代码使用Class.field
语法访问外部类的实例,我始终将其与静态成员关联。但是,如果它是类的一个特定实例,它怎么可能是静态的?通过这个逻辑,一个不同的Outer实例将从Object.this
返回一个不同的外部对象......这不是静态的......我的大脑很痛。
答案 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()函数。