Tom*_*sky 7 java oop interface
扩展接口只是添加了要在任何实现者中定义的附加操作,并且不能破坏任何现有的实现(与扩展类不同).但它可以改变(编辑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);
}
}
Run Code Online (Sandbox Code Playgroud)
产生7,或许接口的意图A是任何A包含一个test值为6 的字段的实现.
如果A被宣布为最终,我们可以确保所有实现A看到相同的值test.
那么有谁理解为什么这是不可能的?
PS:这不是这个问题的重复 ,我知道他们 不能是最终的,我对导致这个结果的设计决策背后的想法感兴趣.
PPS:我理解接口中的常量通常是一个坏主意,这不是问题.
编辑:请检查修订历史记录,这个问题的标题是以不反映问题意图的方式编辑的.对于回答我没问的问题的每个人都很抱歉.是的,接口字段是隐式公共静态最终的,不幸的是,这根本不是我感兴趣的.
编辑2要绝对清楚:这个问题是关于为什么接口不能阻止其他接口扩展它(通过最终或某些等效).
jbi*_*del 11
这是最终的.事实上,public static final即使你没有宣布这些,也是如此.你正在做的不是重写常量变量; 您正在隐藏父接口的版本.
检查一下,A.TEST没有被覆盖.它仍然是6.
的System.out.println(A.TEST);
接口的主要目的不是常量的容器,而是定义一些由具体类实现的API.
并且,从lang spec(9.4. Abstract method declarations):
请注意,接口中声明的方法不能声明为final或发生编译时错误.但是,在接口中声明的方法可以通过在实现接口的类中声明为final的方法来实现.
| 归档时间: |
|
| 查看次数: |
1171 次 |
| 最近记录: |