@Override
除了让编译器检查超类是否具有该方法之外,是否有任何理由注释方法?
问问题
77159 次
4 回答
56
正如您所描述的,@Override 创建了一个编译时检查方法是否被覆盖。这对于确保您在尝试覆盖时没有愚蠢的签名问题非常有用。
例如,我看到了以下错误:
public class Foo {
private String id;
public boolean equals(Foo f) { return id.equals(f.id);}
}
此类按编写方式编译,但将 @Override 标记添加到 equals 方法会导致编译错误,因为它不会覆盖 Object 上的 equals 方法。这是一个简单的错误,但即使是经验丰富的开发人员也能逃脱
于 2009-02-18T14:57:08.260 回答
24
它不仅使编译器检查——尽管这足以使它有用;它还记录了开发人员的意图。
例如,如果您重写了一个方法,但没有在类型本身的任何地方使用它,那么稍后访问代码的人可能会想知道它到底为什么在那里。注释解释了它的用途。
于 2009-02-18T14:55:24.817 回答
12
不,你几乎成功了。
@Override
告诉编译器你的意图:如果你标记一个方法@Override
,你打算覆盖超类(或接口,在 Java 6 中)中的某些内容。一个好的 IDE 将有助于标记任何覆盖没有 的方法的方法@Override
,因此两者的结合将有助于确保您正在做您想做的事情。
于 2009-02-18T14:58:00.037 回答
2
不——除了它还提高了可读性(即除了您的 IDE 使用的任何指示符之外,它还可以很容易地发现一个方法覆盖了超类中的声明)
于 2009-02-18T14:56:06.313 回答