![](/img/trans.png)
[英]Why is it possible to override instance variables in PHP but not in Java?
[英]possible to Java override functions at an instance level?
我正在审查一些很久以前写的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
背景:
这称为匿名类 。 它是扩展非final
类或实现单个接口的类,并且您正在创建该类的单个实例。
现在,对您的问题:
1)这些功能是否在实例级别被覆盖?
不,他们是等级班。 您具有所需类的新子类,并且此子类覆盖该方法。 然后,创建子类的新实例。
2)此语言功能有名称吗?
是的,它是匿名类。
该代码创建一个匿名类( SearchQueryParameter
)的实例,然后覆盖其中的一个方法。
本质上,它创建了扩展SearchQueryParameter
类并覆盖getFilterType()
方法的内容。
由于只能创建该特定类定义的一个实例(无反射),因此该函数可能看起来像在实例级别被覆盖,但实际上在类级别被覆盖(因为它可以替换现有的定义)。
这称为匿名类 。
您可能应该首先自己进行一些研究,但这被称为匿名内部类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.