java中的“@Override”是什么意思?

2022-09-03 04:27:37
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!"); }
}

实际上是否有一些功能,或者只是有点评论?@Override


答案 1

从 Java 注释教程

@Override@Override注释通知编译器该元素旨在重写在超类中声明的元素(重写方法将在标题为“接口和继承”的课程中讨论)。

   // mark method as a superclass method
   // that has been overridden
   @Override 
   int overriddenMethod() { }

虽然重写方法时不需要使用此批注,但它有助于防止错误。如果标记为 的方法无法正确重写其超类之一中的方法,编译器将生成错误。@Override

让我们看一下 Java 语言规范 9.6.1.4 Override 中给出的示例。假设你想重写一个方法,在这种情况下,但你写了:equals

    public boolean equals(Foo that) { ... }

而不是:

    public boolean equals(Object that) { ... }

虽然此代码是合法的,但 对方法声明进行批注会触发编译时错误,因为您实际上并没有重写它,而是重载了它。这可能会导致令人讨厌的错误,注释类型有助于及早发现它们。equals@OverrideOverride


答案 2

重写注释是一种编译时注释,如果具有此注释的方法实际上没有重写父类方法,则Java编译器会引发错误。您可以尝试将 Wolf 类更改为不扩展 Animal 类,如果存在 Override 注释,它将显示编译时错误