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
确实有一些功能,或者它只是有点对此有何评论?
从有关注解的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
方法注释声明@Override
将触发编译时错误,因为实际上您没有覆盖它,而是在重载它。这可能会导致讨厌的错误,并且Override
注释类型有助于及早发现它们。
问题内容: 除了让编译器检查超类是否具有该方法之外,是否有任何其他理由来注释方法? 问题答案: 如您所描述的,@ Override创建一个编译时检查,以确保方法被覆盖。这对于确保尝试覆盖时不会出现愚蠢的签名问题非常有用。 例如,我看到以下错误: 此类按编写方式进行编译,但是将@Override标记添加到equals方法将导致编译错误,因为它不会覆盖Object上的equals方法。这是一个简单的错
问题内容: 我试图理解我朋友的代码,但在代码中没有得到语法@Override。这有什么作用,为什么我们需要编码?谢谢。 问题答案: 提示编译器让它知道您正在重写父类的方法(或Java 6中的接口)。 如果编译器检测到没有要覆盖的函数,它将警告您(或错误)。 这对于快速识别输入错误或API更改非常有用。假设您尝试覆盖父类的方法但将其拼写,则程序将以静默方式调用基类,而如果没有,则不会对此发出任何警告
问题内容: 我的问题是非常基本的,为什么我们人们使用注释,此注释的重要性是什么? 在旧的JDK中,为什么它不显示为警告,但是在最新的JDK中,则需要“为什么..”? 问题答案: 假设您有: 您 确实 打算覆盖,但是由于签名中的错误,它不是这样做的。如果使用,则可以让编译器检测故障。它 还会 向任何 阅读 代码的人表明这将覆盖现有方法或实现接口-为他们提供有关当前行为以及重命名该方法可能产生的影响的
问题内容: 在Java或Android中,有@Override注释。这是什么意思?我发现它是在方法来自子类或继承接口的方法时使用的,我想进一步了解,其他是@SuppressWarnings及其Anonation,如果是的话,java使用了多少注释以及用于什么目的。 问题答案: 这个问题在这里也很简洁地得到了回答: Android@Override用法 这是一个注释,可以用来告诉编译器和IDE,您打
问题内容: 使用Java 注释的最佳实践是什么?为什么? 用注解标记每个覆盖的方法似乎是过大的。是否存在某些编程情况要求使用和其他不应该使用的情况? 问题答案: 每次你重写一种方法都有两个好处时使用它。这样做是为了使你能够利用编译器检查的优势,以确保你认为自己确实覆盖了某个方法。这样,如果你犯了拼写错误的方法名称或不正确匹配参数的常见错误,将会警告你方法实际上并没有像你认为的那样覆盖。其次,它使你
Java 中 @Override 注解是用来指定方法重写的,只能修饰方法并且只能用于方法重写,不能修饰其它的元素。它可以强制一个子类必须重写父类方法或者实现接口的方法。 使用 @Override 注解示例代码如下: 上述代码第 6 行是重写 Object 类的 toString() 方法,该方法使用 @Override 注解。如果 toString() 不小心写成了 t0String(),那么程序