クラスが同じ名前の 2 つの抽象メソッドと同じ識別子を持つ 2 つの定数を持つ 2 つのインターフェイスを実装するコードを書いています。
public class Test implements A,B {
public void doStuff() {}
public void make() {}
public static void main(String[] args) {
Test t=new Test();
System.out.println(A.VALUE);
System.out.println(B.VALUE);
//System.out.println(Test.VALUE);
//System.out.println(t.VALUE);
}
}
interface A { // implicitly abstract
int VALUE=11; // implicitly public static and final
void doStuff(); // implicitly public and abstract
}
interface B {
int VALUE=14;
void make();
void doStuff();
}
今では、Java 7 の時点で、抽象メソッドに関する限り、名前の衝突を心配する必要がないことを知っています (そうですか??): 適切な実装を提供するだけで問題ありません (共有するすべてのメソッド同じ名前はカバーされています)、そのため、複数の継承のような問題や「ダイヤモンド」は発生しません (これは、Java 8 に到達したときに対処することになると思います)。
しかし、定数に関する限り、2 つのインターフェイスを実装し、VALUE フィールドにアクセスしようとしない場合、コンパイラは文句を言わないことに気付きました。
どうですか?これは正常な動作ですか?それらのメンバーにアクセスした場合にのみエラーが発生しますか?
編集つまり、インターフェイスを実装しようとすると、コンパイラがあいまいさについて警告しないのはなぜですか?