我正在回顾很久以前编写的一些Java代码而不是Java开发人员,我有一个问题。我在课堂上发现了以下几行。有人正在创建一个SearchQueryParameter的实例,但是有一些花括号跟随" new SearchQueryParameter"似乎有人在这里覆盖了一些功能。
我的问题如下。
1)这些功能是否在实例级别被覆盖?
2)此语言功能是否有名称?
public static final SearchQueryParameter X_POSTDOC_WORKFLOW_STEP = new SearchQueryParameter(128,"XPOSTDOCWorkflowStep",AdvancedFields.X_EVENT_POSTDOC_WFSTEP,SearchTypes.XEVENT_DOCUMENTS) {
@Override
protected int getFilterType() {
return SEARCH_FILTER;
}
<<snip>>
};
谢谢,mj
答案 0 :(得分:4)
背景:
这称为anonymous class。它是一个扩展非final
类或实现单个接口的类,并且您正在创建此类的单个实例。
现在,问题:
1)这些功能是否在实例级别被覆盖?
不,他们处于等级。您有一个所需类的新子类,此子类将覆盖该方法。然后,您创建子类的新实例。
2)此语言功能是否有名称?
是的,这是匿名课程。
答案 1 :(得分:0)
代码创建一个匿名类(SearchQueryParameter
)的实例,然后覆盖其中的一个方法。
基本上,它会创建扩展SearchQueryParameter
类的某些,并覆盖getFilterType()
方法。
由于只能创建此特定类定义的一个实例(没有反射),因此该函数可能看起来像在实例级别被覆盖但实际上在类级别被覆盖(因为它可能会替换现有的定义) )。
它被称为anonymous class。
答案 2 :(得分:0)
你可能应该首先对自己进行一些研究,但这被称为匿名内部类。