2010-07-25 56 views

回答

3

我假设你问的是在一个已实现的接口中定义的注释方法,或者是超类中的abstract。在这种情况下,您正确地指出方法签名中的拼写错误会导致编译错误,无论有没有@Override。不过,我认为注解对于明确地将方法标记为实现接口仍然很有帮助。如果界面发生变化,在所有实施方法上注解@Override可帮助确定哪些方法签名已更改并需要更新。

更重要的是,正如mklhmnn在他的回答中提到的,如果一个方法从界面中删除,实现类中的@Override注释将导致编译错误。如果没有注释,您可能并不知道从界面中删除了一个方法,这可能会导致微妙的错误。

4

这很有用。如果使用@Override注解的方法并未真正覆盖超类中的方法,则会出现编译错误。

举例来说,如果你有一个类Foo与您共创方法:

@Override 
public boolean equals (Foo foo) { ... } 

,那么你会得到编译时错误,会告诉你,equals (Foo foo)不重写Foo的超类的任何方法。

当您使用IDE的某些代码生成功能时,现代IDE(如IntelliJ)会自动添加此注释。

+0

我认为equals(Object)vs equals(Blah)是@Override如何帮助防止主要(但很难察觉)程序员错误的最好例子。 – Thien 2010-07-25 19:22:59

10

虽然重写方法时不需要使用此注释,但它有助于防止错误。如果标记为@Override的方法无法正确覆盖某个超类中的某个方法,则编译器会生成一个错误。
它更好地失败快,赶上错误,而不是稍后找出你写的hashcode(),但你的意思是写hashCode()@Override有助于及早发现问题。

SO上的相似问题。

另见this

1

将方法标记为@Override将在API更改时产生编译错误,因此不再有超级方法可用。也许这就是原因。

2

我不使用它,从来没有问题。我不知道为什么突然每个人都开始使用它(Eclipse,我也不使用它)。

重构不是问题,无论如何IDE会为您检查。

@Override虽然可以帮助代码的可读性,但是人们很清楚发生了什么,而不是编译器。虽然我的IDE也会以图形方式标记重写方法,但它不是很突出,但重点仍然是,这是工具可以为我们自动完成的工作。

1

我认为这样做也很好,因为这表明Javadoc在其他地方,您不会忘记它。