转载

为什么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
正文到此结束
Loading...