为什么Java中没有最终接口?

扩展接口只需添加要在任何实现者中定义的其他操作,并且不能破坏任何现有实现(与扩展类不同).但它可以改变(编辑3个常数)并因此改变常数的PERCIEVED值(编辑2由实现类看到).

例如,以下内容:

interface A {
  int TEST = 6;
}

interface B extends A {
  int TEST = 7;
}

public class InterfacesTest implements B {
  public static void main(final String[] args) {
    System.out.println(TEST);
  }
}

产生7,当接口A的意图可能是A的任何实现包含一个值为6的测试字段.

如果A被宣布为最终,我们可以确保A的所有实现都看到相同的测试值.

那么有谁理解为什么这是不可能的?

> P.S.:这不是重复的

this question
,我知道他们

不能是最终的,我对设计背后的想法很感兴趣

导致这一结果的决定.

> P.P.S:我理解常数

接口通常是个坏主意,

这不是问题.

编辑:请检查修订历史记录,这个问题的标题是以不反映问题意图的方式编辑的.对于回答我没问的问题的每个人都很抱歉.是的,接口字段是隐式的公共静态最终,不幸的是,这根本不是我感兴趣的.

编辑2要绝对清楚:这个问题是关于为什么接口不能阻止其他接口扩展它(通过最终或某些等效).

接口的主要目的不是常量的容器,而是定义一些由具体类实现的API.

并且,从lang规范(9.4.抽象方法声明):

Note that a method declared in an interface must not be declared final or a compile-time error occurs. However, a method declared in an interface may be implemented by a method that is declared final in a class that implements the interface.

翻译自:https://stackoverflow.com/questions/3893836/why-are-there-no-final-interfaces-in-java

原文 

https://codeday.me/bug/20190111/518922.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 为什么Java中没有最终接口?

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址