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注释通知编译器该元素是要覆盖超类中声明的元素(覆盖方法将在标题为"接口和继承"的课程中讨论).Run Code Online (Sandbox Code Playgroud)// mark method as a superclass method // that has been overridden @Override int overriddenMethod() { }虽然在覆盖方法时不需要使用此注释,但它有助于防止错误.如果标记的方法
@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注释,它将显示编译时错误