Java:在匿名内部类中调用外部类方法

时间:2012-01-28 05:27:26

标签: java android inner-classes

最近,我在一个android项目中遇到了一个神秘的问题,我在其中描述了here。我以某种方式解决了这个问题,但仍然不知道其背后的确切原因。

假设我想在内部类中调用函数foo()。问题是,直接调用它之间的区别是什么

foo();

或使用外部类实例

调用它
OuterClass.this.foo();

此外,如果有人可以检查我的最后question与此相关,我会很感激,并告诉我错误发生的原因。非常感谢。

PS:我在某处读过非静态内部类总是会拥有外部类的实例。因此,如果我只使用foo()?

,它将使用该实例调用外部函数

1 个答案:

答案 0 :(得分:23)

后者更明确,如果内部类中存在具有相同名称的外部类方法,则允许您调用外部类方法。

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
        }
    }
}