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
放在不重写任何内容的方法上,则会出错。它肯定不是必需的,但有助于编译器帮助您。