2

从 Java 1.6 开始,我们可以使用 @Override 来标记接口中定义的方法的实现。我理解拥有该注释的价值,我系统地使用它。但是有人可以向我解释一下到底有什么可以“覆盖”,因为接口只定义了一个合同并且不提供默认实现?

4

3 回答 3

1

是的,没有什么可以覆盖的,唯一合理的解释是这是惯例的一个分支。

在实现接口的类的上下文中,您实际上并不需要它,因为如果您无论如何都未能为所有接口方法编写代码,编译器会发出尖叫声。在此设置中,注释的作用类似于标记,与注释没有什么不同。

此外,如果它与接口相关,IDE 应该停止在自动生成的快速修复方法存根中包含 @Override 它。

最重要的是,如果在接口方法的实现上使用了 @Override 注释,它们应该生成一个“未使用”的代码警告。

于 2013-03-28T06:29:01.300 回答
0

从语义上讲,仅当您将接口视为一种空基类而不是完全不同的事物时才有意义。从历史上看,这实际上是接口概念的起源。C++ 是一种没有“接口”的原生概念的语言,但它支持为单个类提供多个基类。许多使用该语言的人认为拥有多个基类太笨拙而没有用——除非基类根本没有实现,只有方法定义。随后的语言,如 Java,将纯接口基类的概念形式化。

于 2013-03-28T00:54:04.877 回答
0

我想它在这种情况下可能有用。

interface Goable {
  void go(Location loc);
}

class Vehicle implements Goable {
  void go() {
    ...
  }

  void go(Location loc) {
    ...
  }
}

在 Vehicle 类中,使用@Override可以帮助识别实现的方法。

于 2013-03-28T02:07:16.970 回答