在Java中调用的这种实例化是什么?

Ter*_* Li 3 java methods constructor overriding instantiation

对于Java来说,这可能是一个非常基本的问题,但我不记得它,也不知道如何在线搜索它.

button.setOnClickListener(new OnClickListener()
{
  @Override
   public void onClick(View v)
   {
     Thread.sleep(100);
   }
}
Run Code Online (Sandbox Code Playgroud)

我习惯使用类似的构造函数初始化对象new OnClickListener(arg1, arg2, ...).根据我自己的经验,我在构造对象时从不覆盖方法.我只是在扩展课程时才这样做.如果有任何术语,那么在Java中调用的这种实例化是什么?在其他情况下我们应该使用它吗?

Bri*_*new 6

这是一个匿名课程.它是OnClickListener接口的实现,但该实现未命名.编写简洁,实现在调用上下文中可见(通常对可读性有用),但由于它是就地实现,因此不能在其他地方使用它.

还要注意,它是一个内部类,因此引用了它的周围类.

有关详细信息,请参见此处

回覆.对周围阶级的引用.内部类具有对其外部类的隐式引用(如果您尝试使用XStream来序列化内部类,则可以看到这一点.它将随外部拉出外部类).如果外部类中有变量,则可以在内部引用它(假设它是一个final变量,请记住)