0

假设我有 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);//<- ??

    }
}

哪个常量会被打印出来还是编译错误?

4

2 回答 2

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.

于 2013-02-22T22:16:09.797 回答
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 节)。否则,会发生编译时错误。

于 2013-02-22T22:20:53.890 回答