JDe*_*age 7 java syntax overriding
可能重复:
java中有什么"@Override"?
到目前为止,我从来没有在方法之前放置"@Override".我看到了一些代码示例,但我不明白它的实用性.我喜欢一些解释.
非常感谢,
JDelage
指示方法声明旨在覆盖超类中的方法声明.如果使用此批注类型注释方法但不覆盖超类方法,则编译器需要生成错误消息.
http://download.oracle.com/javase/6/docs/api/java/lang/Override.html
我想解释它的用法的情况是覆盖时equals.
这会出错,因为equals需要一个Object参数:
public class Foo{
@Override
public boolean equals(Foo f){
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
首先,你不能注释一个类有@Override.此批注指示方法声明旨在覆盖超类中的方法声明.
您不必注释覆盖方法,但如果使用此批注并且带注释的方法不会覆盖超类方法,则编译器将生成错误消息.
最好的例子 - 覆盖equals().
如果你写一个这样的类:
public class Foo
{
public String bar;
public boolean equals(Foo other)
{
return this.bar.equals(other.bar);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你重载了equals方法,而不是Object.equals按预期覆盖.
如果使用with注释equals方法@Override,编译器将给出一个错误,指出(正确地)您没有覆盖超类方法.
在Java 6中,您也可以使用它来实现接口方法 - 当您只在类中添加一个方法来满足某个接口时,这很方便,因此编译器可以检查它是否是必需的,并提醒您更改接口.
与所有注释一样,它实际上是一个程序化注释,但让编译器检查您的假设(仍然)是否正确在这些情况下非常方便.