这段Java代码中的 @Override 是什么意思?

11

可能重复:
何时使用 Java 的 @Override 注释以及为什么?
Java,@Override 是什么意思?


我正在查看 Drools Planner 示例源代码,然后遇到了这样的代码:

@Override
protected Solver createSolver() {
    XmlSolverConfigurer configurer = new XmlSolverConfigurer();
    configurer.configure(SOLVER_CONFIG);
    return configurer.buildSolver();
}

protected Solver createSolverByApi() {
    // Not recommended! It is highly recommended to use XmlSolverConfigurer with an XML configuration instead.
    SolverConfig solverConfig = new SolverConfig();

    solverConfig.setSolutionClass(NQueens.class);
    .....TRUNCATED....
    solverPhaseConfigList.add(localSearchSolverPhaseConfig);
    solverConfig.setSolverPhaseConfigList(solverPhaseConfigList);
    return solverConfig.buildSolver();
}

据我所知,createSolver()createSolverByApi()在被显式调用时应该返回Solver对象。

@Override在这里的意思是什么?@这个术语的一般含义是什么?


编辑:非常抱歉;我不小心重复了What does @Override mean?


4
至少尝试阅读文档... http://docs.oracle.com/javase/6/docs/api/java/lang/Override.html - skaffman
5个回答

17

@Java注解

@Override 表示该方法重写了父类的方法(在这种情况下是 createSolver)。

根据Javadoc@Override 的作用如下:

  

表示一个方法声明意图重写超类中的方法声明。

这个注解对于编译时检查非常有用,可以验证您正在重写的方法是否有效(正确重写)。


1
那么,如果没有这个关键字,方法是否可以被覆盖?如果在意图覆盖另一个方法时排除了它会发生什么? - Aaron Franke
2
它可以在没有注释的情况下被覆盖。它只是帮助开发人员知道一个子类覆盖了一个父类方法。 - Buhake Sindi

3

请参阅Java注释教程,其中有“编译器使用的注释”一节。以下是相关部分的快速复制粘贴

@Override-@Override注释通知编译器该元素旨在覆盖在超类中声明的元素(将在标题为“接口和继承”的课程中讨论覆盖方法)。


2

这被称为注解。它实际上不会编译成特殊代码,但有助于避免错误:本质上,它表示该方法覆盖超类的一个方法。没有此注释可能会导致警告,而具有此注释但没有拥有相同注释方法的超类甚至是个错误

这可以避免重构错误:如果超类中的方法被重命名,而覆盖没有被重命名,则会变成错误。


没有特殊含义对编译器来说...如果编译器不给它分配特殊含义,它怎么可能会引发编译错误呢?请看我的回答。这在“编译器使用的注释”一节中有所讨论,因此它肯定对编译器有特殊含义。 - Robin
至我所知,没有运行时保留。 - Has QUIT--Anony-Mousse
@Anony-Mousse 很好的解释,所以+1。我还为您的答案进行了正确拼写的编辑。 - SpringLearner

0
这是Java注解,对于您的情况,您可以在方法上方使用@Override来确保您正在覆盖超类方法。如果您使用它并且该方法不在超类中,因为您错误地输入了名称,例如,编译时将会出现错误。

0
我想添加这个: 在超类中声明或在接口中声明的方法(自Java 6以来)

不,自从Java 5以后才引入了注解。@Override是由Joshua Bloch在Java 5中引入的。 - Buhake Sindi
自Java 5以来在超类中声明,自Java 6以来在接口中声明。 - Benoit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接