发布
社区首页 >问答首页 >为什么在Java 7中扩展的接口(S)的接口重写方法?

为什么在Java 7中扩展的接口(S)的接口重写方法?
EN

Software Engineering用户
提问于 2016-04-09 10:22:40
回答 3查看 9.2K关注 0票数 8

我查看了Java7中的地图SortedMap文档,我意识到了SortedMap,它扩展了Map,覆盖了entrySet()keySet()values()

AFAIK,接口不能在Java 8之前用Java实现方法,那么重写这些方法的原因是什么呢?

EN

回答 3

Software Engineering用户

发布于 2016-04-09 13:21:22

看起来,这些方法似乎完全被重写了,以便能够提供不同的文档。

对于所有三种方法,文档中唯一的不同之处是SortedMap版本添加了“集合的迭代器以升序返回条目”。以主描述和“按升序键排序”到返回值描述。

最明显的后续问题是,为什么这三个方法签名没有简单地更改为返回SortedSet而不是Set。不幸的是,我无法给出这样的原因,因为Java语言似乎允许这种更改,而SortedSet上的其他方法似乎很容易实现。

票数 6
EN

Software Engineering用户

发布于 2017-05-23 18:00:10

来自Java语言规范用于Java 7

除了确认方法签名之外,通过重写方法声明可以完成的所有任务是细化返回类型或限制方法的实现可能引发的异常。

因此:您可以更改throws签名,并且/或可以指定原始返回类型的更具体的子类型。例如:

代码语言:javascript
代码运行次数:0
复制
interface Foo {
  Foo get() throws IOException;
}

interface Bar extends Foo {
  Bar get() throws RuntimeException;
}

这是完全合法的,因为无论哪一条,都要完全省略throws条款。

票数 4
EN

Software Engineering用户

发布于 2016-04-09 17:24:41

我不认为接口方法能够“覆盖”父接口方法(在Java 7中);只有(子)类可以有“覆盖”方法。SortedMap和Map是接口,而不是类。因此,您所看到的只是一个文档问题,而不是一些技术问题。

(而子接口重载则是另一回事,尽管您引用的方法不是重载,因为它们具有相同的签名。)

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/315228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档