如何称呼 java 在一个新的之后覆盖函数



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

classB body
....
    ClassA a = new ClassA(){
@Override 
public void funcion(){
 atributeClassB = whatever 
   } 
 } ;
....

它是如何被称为这种构造的?括号之间的代码何时执行?此代码如何访问classB属性?

事实上,如果我只知道这种工作方式是如何命名的,我可以在谷歌中记录myselve,但没有密钥名称,我找不到它。

我在这里找到的代码是151行

它被称为匿名本地派生类(或"匿名内部类",尽管只是"内部"和本地[所有本地类都是内部的;并非所有内部类都是本地的;更多信息请参阅下文])。大括号中的代码构成匿名类的类定义的一部分。

这个

ClassA a = new ClassA(){@Override public void funcion(){ atributeClassB = whatever } } ;

实际上相当于:

ClassA a = new SubClassA();

其中SubClassA在包含类中定义

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

尽管还有更多的内容,因为您的示例中的匿名类是在一个方法中定义的(这是"本地"与"内部"的区别),但从这里开始的各个部分都有更多内容。

这是一个匿名的内部类。

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

最新更新