java - 在 Java 中,当一个接口(interface)扩展另一个接口(interface)时,为什么要在子接口(interface)中重新声明一个方法?

标签 java interface

我一直在查看来自 J2EE 的 JMS API,并发现了一个奇怪的行为,即在接口(interface)中声明的某些方法(例如,Session 中的 createQueue)在 QueueSession 等子接口(interface)中再次声明,并且具有相同的文档。

由于子接口(interface)“继承”了它继承的接口(interface)的所有方法声明,并且由于 JavaDoc 工具可以毫无问题地整理子接口(interface)的 JavaDoc 并创建“继承的操作”列表,所以我无法弄清楚是什么这样就实现了。

唯一想到的是,最初调用是在 Session 中,然后在创建特定子类时转移到 QueueSession,尽管那时我希望在上层类的文档中看到一些东西。但这只是推测。

所以问题是: 在子接口(interface)中重新声明方法是否有令人信服的理由?

最佳答案

在为 Sun 工作时,我曾见过这种情况,我可以告诉您这种情况通常是如何发生的。有人用一些方法定义了一个接口(interface),比方说 Alice;许多开发人员实现了该接口(interface)。

一段时间后,他们意识到他们需要一些其他接口(interface),称之为 Bob,它具有 Alice 方法的子集,以便允许它作为另一个的基础接口(interface)界面,克拉拉。

如果将 Alice 的方法移到 Bob 中,就会破坏实现 Alice 的所有代码;你必须返回并至少重新编译一大堆代码,其中一些可能不属于你,并且出于政治原因不能破解。

所以你没有。

关于java - 在 Java 中,当一个接口(interface)扩展另一个接口(interface)时,为什么要在子接口(interface)中重新声明一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/563952/

相关文章:

java - 在 Android 中使用 MapController 的 setCenter 方法时出现空指针异常

java - 如何将凭证传递给 Translation API v3?

php - php中抽象和接口(interface)有什么区别?

java - 查找具有给定总和的数字子集

java - 无法在 Netbeans 中查看 Jframe 端

go - 用类型参数替换接口(interface)参数有什么好处?

android - Kotlin : Not able to call interface method with inheritance

c++ - 接口(interface)设计: safety of overloaded function taking string and char array

c# - 当只需要几个方法时,有什么方法可以避免创建巨大的 C# COM 接口(interface)包装器?

java - 如何在 Windows 7 上设置 java_home?