繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM