假设我有2个接口
interface A {
public static final int CONSTANT1 = 6;
}
interface B {
public static final int CONSTANT1 = 7;
}
class MYclass implements A, B {
public static void main(String[] args) {
System.out.println(CONSTANT1);//<- ??
}
}
将打印哪个常量或编译错误?
答案 0 :(得分:1)
然而,作为参考,代码:
interface A
{
int CONSTANT1 = 6;
}
interface B
{
int CONSTANT1 = 7;
}
public class Test implements A, B
{
public static void main(String[] args)
{
System.out.println(CONSTANT1);
}
}
打印7。
答案 1 :(得分:1)
我的javac 7在adchilds的例子中失败了:
错误:对CONSTANT1的引用不明确,A中的变量CONSTANT1和B中的变量CONSTANT1匹配
JLS http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.3
类可以继承多个具有相同名称的字段。这种情况本身不会导致编译时错误。但是,在类的主体内通过其简单名称引用任何此类字段的任何尝试都将导致编译时错误,因为这样的引用是不明确的。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.5.6.1
如果表达式名称由单个标识符组成,那么在标识符出现的位置必须只有一个声明表示局部变量,参数或字段可见(第6.4.1节)。否则,发生编译时错误。