Java:为什么匿名内部类可以访问外部类的方法?

时间:2014-06-08 15:25:11

标签: java anonymous-class

最近我发现这是有效的,虽然我不指望它:

class Outer
{ 
    Button b;

    void foo() {}


    void bar()
    {
        b = new Button();
        b.setOnClickListener(new OnClickListener(){
            @Override
            public void OnClick()
            {
               foo();
            }
        }); 
    }
}

我希望Outer.this.foo()是必需的,但似乎只是foo()也可以。 有人可以告诉我什么时候这个被添加到语言中? 请帮我理解确切的名称解析规则。谢谢!

问题:

1)为什么这有效?

2)如果这样做,为什么我们需要" Outer.this"语法?

1 个答案:

答案 0 :(得分:2)

自从引入内部类以来,调用这样的方法的可能性已经存在。 Java Language Specification, Section 15.12.4.1., Compute Target Reference (If Necessary)中详细描述了解析调用方法的实例的机制。

您可能正在提到您不需要"Qualified this"这一事实。但是这个this主要用于在内部实例和外部实例具有相同签名的方法时解决歧义。