@Override在此Java代码中的含义是什么?

@Override在此Java代码中的含义是什么?

问题描述:

可能重复:
When do you use Java's @Override annotation and why?
Java, What does @Override mean?@Override在此Java代码中的含义是什么?

我被检查出Drools的规划师实例源代码,我遇到的代码来是这样的:

@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?

+3

至少可以使* *一些企图在阅读文档... http://docs.oracle .com/javase/6/docs/api/java/lang/Override.html – skaffman 2012-01-16 07:35:34

@Java Annotations

@Override意味着该方法覆盖父类(在本例中为createSolver)。

@OverrideJavadoc状态:

表示一个方法声明打算重写超类中的方法 声明。

此注释对于编译时检查来验证您覆盖的方法是否有效(正确覆盖)很有用。

+0

那么,如果没有这个,一个方法可以被覆盖吗?如果在方法意图覆盖另一个方法时排除了这种情况会发生什么? – 2016-11-04 04:00:44

+0

无需注释即可覆盖。它只是帮助开发人员知道有一个父类方法已被子类覆盖。 – 2016-11-04 09:06:36

这被称为Annotation。它实际上并未编译成特殊代码,但它有助于避免错误:实质上,它表示方法优先于的方法superclass。没有这个注释会导致警告,有这个注释,但没有超类具有相同注释的方法甚至是错误

这样可以避免重构错误:如果superclass中的方法被重命名,并且覆盖不成立,那么它将成为错误。

+0

编译器没有特别的意义......如果编译器没有给它赋予特殊的含义,它怎么会产生编译错误。看到我的答案。它在'编译器使用的注释'一节中进行了讨论,因此编译器肯定具有特殊含义 – Robin 2012-01-16 07:38:11

+0

如:无运行时间保留AFAIK。 – 2012-01-16 07:54:06

+0

@ Anony-Mousse很好的解释+1我也编辑过你的答案,正确拼写 – SpringLearner 2013-10-12 04:30:05

请参阅Java tutorial about annotations,此处有'编译器使用的注释'部分。相关部分的快速复制粘贴

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

这是java的注释,你的情况,你会用@Override上述的方法,以确保您覆盖超类的方法,如果你用它和方法是不是在超类,因为您键入它名称错误,例如编译时会发生错误。

我想补充一点:在一个超类或方法声明 在接口中声明(因为Java 6中)

+0

不,从Java 5开始引入了注释。自@ Java 5以来引入了@ @ Override'(Joshua Bloch)。 – 2012-01-16 07:44:08

+0

自java 5以来在superClass中声明5 并在接口中声明自java6 – Benoit 2012-01-17 11:07:05