【发布时间】:2012-09-15 16:46:54
【问题描述】:
在 Java 中,当您向接口添加新方法时,会破坏所有客户端。当您有一个抽象类时,您可以添加一个新方法并在其中提供一个默认实现。所有客户端都将继续工作。
我想知道为什么界面是这样设计的?
所有旧方法仍然存在,因此似乎不存在向后兼容性问题。 (当然需要有某些例外,但我认为能够在不破坏客户端的情况下向 Java 接口添加新方法可能是一个非常好的主意......)
非常感谢您的 cmets。
【问题讨论】:
-
“休息”是什么意思? JDBC 在版本之间的接口中添加了方法,而不会破坏旧版本。
-
@Peter Lawrey,我的意思是,如果 ClassA 实现 IfsA 并且您将 IfsA 发送给您的客户,那么当您向 IfsA 添加新方法时,具有旧版本 IfsA 的客户端将尝试访问他在旧 IfsA 中使用的方法会出现运行时错误。在此处查看 Erich Gamma 答案(搜索“在向接口添加新方法时使用 Java”)artima.com/lejava/articles/designprinciples.html
-
@Peter Lawrey,实际上你所问的答案就在你的问题之内:)“......版本之间......” - 这不是我的问题中描述的情况。跨度>
-
您对 API 进行了重大更改,但您不认为这是版本更改?
-
@Peter Lawrey,我不是这么说的。
标签: java design-patterns interface jvm-languages