Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:为什么匿名内部类可以访问外部类的方法?_Java_Anonymous Class - Fatal编程技术网

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

Java:为什么匿名内部类可以访问外部类的方法?,java,anonymous-class,Java,Anonymous Class,最近我发现这是可行的,尽管我认为它不会: class Outer { Button b; void foo() {} void bar() { b = new Button(); b.setOnClickListener(new OnClickListener(){ @Override public void OnClick() {

最近我发现这是可行的,尽管我认为它不会:

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”语法?

自从引入内部类以来,就有可能调用这样的方法。中详细描述了解析调用方法的实例的机制


你可能指的是你不需要的事实。但是,当内部实例和外部实例有一个具有相同签名的方法时,此
主要用于解决歧义

这是对语言设计的投诉吗?不,我只是想了解这里的确切名称解析规则。我觉得你的问题没有多大用处。如果你的评论是你的实际问题,那会有很大的变化。我相信Java 1.1中添加了内部类,大约是在1997年……非常感谢,这正是我需要知道的。