在java中有什么"@Override"?

sym*_*ony 14 java syntax

public class Animal {
   public void eat() { System.out.println("I eat like a generic Animal."); }

}

public class Wolf extends Animal {
   @Override
   public void eat() { System.out.println("I eat like a wolf!"); }
}
Run Code Online (Sandbox Code Playgroud)

是否@Override确实有一些功能,或者它只是有点对此有何评论?

Pas*_*ent 22

从Java教程注释:

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

   // mark method as a superclass method
   // that has been overridden
   @Override 
   int overriddenMethod() { }
Run Code Online (Sandbox Code Playgroud)

虽然在覆盖方法时不需要使用此注释,但它有助于防止错误.如果标记的方法@Override无法正确覆盖其某个超类中的方法,则编译器会生成错误.

让我们看一下Java语言规范9.6.1.4覆盖中给出的示例.假设你要覆盖一个方法,equals在这种情况下,你写道:

    public boolean equals(Foo that) { ... }
Run Code Online (Sandbox Code Playgroud)

代替:

    public boolean equals(Object that) { ... }
Run Code Online (Sandbox Code Playgroud)

虽然这段代码是合法的,但是注释equals方法声明@Override会触发编译时错误,因为你实际上没有覆盖它,你就会重载它.这可能会导致令人讨厌的错误,Override注释类型有助于及早发现它们.


Faz*_*zal 11

覆盖注释是一个编译时注释,如果具有此注释的方法实际上没有覆盖父类方法,则会使java编译器抛出错误.您可以尝试更改Wolf类以不扩展Animal类,如果存在Override注释,它将显示编译时错误