最近,我在一个android项目中遇到了一个神秘的问题,我描述了here .我以某种方式解决了这个问题,但仍然不知道其背后的确切原因。
假设我想在内部类中调用函数 foo()。问题是,像这样直接调用有什么区别
foo();
或者用外部类实例调用它
OuterClass.this.foo();
此外,如果有人可以查看我的上一个 question,我将不胜感激与此相关,并给我一个关于错误发生原因的线索。非常感谢。
PS:我在某处读到非静态内部类将始终保存外部类的实例。因此,如果我只使用 foo(),它将使用该实例调用外部函数?
最佳答案
后者更明确,如果内部类中存在同名方法,则允许您调用外部类方法。
class OuterClass {
void foo() { System.out.println("Outer foo"); }
View.OnClickListener mListener1 = new View.OnClickListener() {
void foo() { System.out.println("Inner foo"); }
@Override public void onClick(View view) {
foo(); //Calls inner foo
OuterClass.this.foo(); //Calls outer foo
}
}
View.OnClickListener mListener2 = new View.OnClickListener() {
@Override public void onClick(View view) {
foo(); //Calls outer foo
OuterClass.this.foo(); //Calls outer foo
}
}
}
关于Java:在匿名内部类中调用外部类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9043170/