我的问题非常基本,为什么我们人们使用@Override
注释以及这个注释的重要性是什么?
在旧JDK中为什么它不显示为警告,但在最新的JDK中它需要那么为什么......?
答案 0 :(得分:34)
假设你有:
public class Foo
{
public void bar(String x, String y) {}
}
public class Foo2 extends Foo
{
public void bar(String x, Object y) {}
}
你真的意味着Foo2.bar
覆盖Foo.bar
,但由于签名错误,它不会。如果使用@Override
,您可以让编译器检测到故障。它也向任何读取指示这是覆盖现有方法或实现接口的代码 - 告知它们当前行为以及重命名方法可能产生的影响。
此外,如果方法覆盖方法而指定@Override
,则编译器可能会发出警告,这意味着您可以检测是否有人添加了具有相同签名的方法超类没有你意识到它 - 你可能不希望重写新方法,因为你现有的方法可能有不同的语义。虽然@Override
没有提供“取消覆盖”该方法的方法,但它至少突出了潜在的问题。
答案 1 :(得分:6)
为了确保在编译时我们真的重写了这个方法,也增加了代码的可读性
从JDK 1.5开始, @Override
已存在,因此您可能会在之前的
答案 2 :(得分:2)
使用此注释,您可能确信您实际上是覆盖基本方法,而不是创建新方法(例如,意外使用错误的参数)。如果使用@Override
注释,如果出现问题,则会出现编译时错误。
答案 3 :(得分:1)
在编译期间验证您实际上是否覆盖了方法。当您提供注释时,IDE会立即告诉您。