扩展接口只需添加要在任何实现者中定义的其他操作,并且不能破坏任何现有实现(与扩展类不同).但它可以改变(编辑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