Java—什么是“Java”@凌驾;用来做什么?

Java—什么是“Java”@凌驾;用来做什么?,java,syntax,overriding,Java,Syntax,Overriding,可能重复: 到目前为止,我从未将“@Override”放在方法之前。我看到了一些代码示例,但我不理解它的实用性。我想要一些解释 非常感谢, 这是一个传统的评论。一些编译器确保后面跟着@Override的函数实际上是一个Override。。。只是一个故障保险 指示方法声明旨在重写超类中的方法声明。如果使用此注释类型对方法进行注释,但未重写超类方法,则需要编译器生成错误消息 我想解释一下它的用法是在重写等于时 这将导致错误,因为equals需要一个对象参数: public class Foo{

可能重复:

到目前为止,我从未将“@Override”放在方法之前。我看到了一些代码示例,但我不理解它的实用性。我想要一些解释

非常感谢,


这是一个传统的评论。一些编译器确保后面跟着@Override的函数实际上是一个Override。。。只是一个故障保险

指示方法声明旨在重写超类中的方法声明。如果使用此注释类型对方法进行注释,但未重写超类方法,则需要编译器生成错误消息

我想解释一下它的用法是在重写
等于

这将导致错误,因为
equals
需要一个
对象
参数:

public class Foo{

    @Override
    public boolean equals(Foo f){
        return true;
    }
}

它表示您期望该方法重写一个超类方法。当你拼写错误方法名或给它错误的参数时,它确实很有用,这样它就不会覆盖你认为它覆盖的内容。

首先,你不能用
@override
注释类。此注释表示方法声明旨在重写超类中的方法声明


您不必对重写方法进行注释,但是如果您使用此注释并且您的注释方法没有重写超类方法,那么编译器将生成错误消息。

最佳示例-重写
equals()

如果您编写这样的类:

public class Foo 
{
    public String bar;

    public boolean equals(Foo other)
    {
        return this.bar.equals(other.bar);
    }
}
然后您重载了equals方法,而不是像预期的那样重写
Object.equals

如果用
@Override
注释equals方法,编译器将给出一个错误,说明(正确地)您没有重写超类方法

在Java 6中,您也可以使用它来实现接口方法——当您只向类中添加一个方法以满足某些接口时,这非常方便,因此编译器可以检查它是否是必需的,并提醒您接口发生了更改


与所有注释一样,它实际上是一个编程注释,但在这些情况下,让编译器检查您的假设(仍然)正确是非常方便的。

复制只是为了澄清,您说“@Override before a class”-您是指方法吗?或者你真的是在类上引用@Override注释吗?也是抱歉的重复-这确实是重复的,但我搜索了@Override,没有得到任何结果。嗯,(我个人不在乎它是否重复,注释只是为SO搜索提供提示)…虽然我认为在真正是重写的方法上可以省略它。我认为,在某些环境中,这会产生警告,但不会产生错误。如果将
@Override
放在不重写任何内容的方法上,则会出错。它肯定不是必需的,但有助于编译器帮助您。