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

私の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) を示す宣言が 1 つだけ存在する必要があります。そうしないと、コンパイル時エラーが発生します。

于 2013-02-22T22:20:53.890 に答える