Java 如何';在新的

Java 如何';在新的,java,constructor,Java,Constructor,我经常在java代码中发现这种新的重写 classB body .... ClassA a = new ClassA(){ @Override public void funcion(){ atributeClassB = whatever } } ; .... 这种构造怎么叫?括号之间的代码何时执行?这段代码如何访问classB属性 事实上,如果我只知道这种工作方式是如何被称为我可以在谷歌文档我自己,但没有一个关键的名称,我找不到它 我在第151行找到的代码是一个.它

我经常在java代码中发现这种新的重写

classB body
....
    ClassA a = new ClassA(){
@Override 
public void funcion(){
 atributeClassB = whatever 
   } 
 } ;
....
这种构造怎么叫?括号之间的代码何时执行?这段代码如何访问classB属性

事实上,如果我只知道这种工作方式是如何被称为我可以在谷歌文档我自己,但没有一个关键的名称,我找不到它


我在第151行找到的代码是一个.

它被称为匿名本地派生类(或“匿名内部类”,尽管只是“内部”和本地(所有本地类都是内部的;并非所有内部类都是本地的;下面将详细介绍))之间有区别。花括号内的代码构成匿名类的类定义的一部分

这个

…实际上相当于:

ClassA a = new SubClassA();
…其中
子类
在包含类中定义:

class SubClassA extends ClassA {
    @Override public void funcion(){ atributeClassB = whatever }
}

…尽管还有更多的内容,因为您示例中的匿名类是在方法中定义的(这是“本地”与“内部”之争),。

其他两个答案是正确的。我只想补充一点,
@Override
注释在这里的含义与普通方法声明中的含义完全相同。这意味着该方法覆盖了在超类中声明的方法,或者(Java 6及更高版本)实现了在接口或抽象超类中声明的方法。

这是Java中的一个流行概念,您可以通过在web中进行少量搜索找到它,请参阅
class SubClassA extends ClassA {
    @Override public void funcion(){ atributeClassB = whatever }
}