0

これが私が3つのインターフェースを持っているコードです

interface i1{ 
int x=1;
}
interface i2{ 
int x=2;
}
interface i3{ 
int x=3;
}
class A implements i1,i2,i3{
system.out.println(x); // It shows Field is ambgous
}

これに答える方法、またはこの問題を克服する方法。

4

6 に答える 6

0

インターフェイスは、クラス構造を示すように設計されています。複数のインターフェイスでフィールドを宣言し、それらすべてのインターフェイスを 1 つのクラスで使用する必要がある場合は、その変数に使用するインターフェイスを明示的に宣言する必要があります。

System.out.println(i3.x);

extendsインターフェイスでキーワードを使用して、継承を設定することであいまいさを減らすこともできます。

interface i1{int x=1;}
interface i2 extends i1 {...}
interface i3 extends i2 {...}
class A implements i3{...}

クラス A は、i1、i2、および i3 で宣言されたすべての関数を実装する必要があります。

于 2013-09-23T10:32:28.153 に答える
0

*強力なテキスト*ただし、この質問に対する回答は多くの人から寄せられています。

しかし、いくつかの詳細な分析があります。

  interface I1{ 
  int x=1;
  }
  interface I2{ 
  int x=2;
  }
  interface I3{ 
  int x=3;
  }
  class A implements I1,I2,I3{
  static{
   System.out.println(I1.x);
  }

  }

整数 x は public final 整数 x です。コンパイラはそれを最終手段として内部的に変換し、それを定数として扱います。

そのため、ユーザーが x の値を出力すると、コンパイラーはこれに対してあいまいなエラーを出します。

これを実際に実装するには、jdk にある -javap ツールを使用してください。

使用法: javap I1

于 2013-09-23T11:23:38.607 に答える