2

method1、変数 x を持つ interface1 と、method1、変数 x を持つ interface2 があります。2 行目ではなく 1 行目にエラーが表示されるのはなぜですか?

interface interface1{
    public int x =10;
    public void method1();
}
interface interface2{
    public int x =11;
    public void method1();
}

public class Test implements interface1, interface2{

    int y = x; // Line 1
    @Override
    public void method1() {  //Line 2
    }

}
4

4 に答える 4

3

「x」は、スコープ内に 2 つ (各インターフェイスから 1 つ) あるため、あいまいです。対照的に、「method1()」はそうではありません。Java の規則により、Test の定義は、両方のインターフェースで定義されている実装を提供するという要件を満たしているためです。

于 2013-01-12T07:13:21.250 に答える
2
interface interface1{
  public static final int x =10;
  public void method1();
}

interface interface2{
  public static final int x =11;
  public void method1();
}

public class Test implements interface1, interface2{

  int y = interface1.x; // Line 1 or int y = interface2.x;
  @Override
    public void method1() {  //Line 2
  }

}

これが正しい方法です。

于 2013-01-12T06:35:59.307 に答える
0

あなたの任務があいまいだからです。interface1.xまたはを指定する必要がありますinterface2.x

例えば:

public class Test implements interface1, interface2{

  int y = interface1.x; // Line 1
  @Override
    public void method1() {  //Line 2
    }

}
于 2013-01-12T06:29:04.797 に答える
-1

最終変数interaface1.x, interface2.x; 参照されるオブジェクトを取得するxinterface1、2 番目のインターフェイスとは異なる場合があります。

しかしmethod1()、任意のインターフェイスを使用する場合、メソッドの本体は とinterface1.method1()同じinterface2.mathod1()です。しかし、一方でxinterface1.xと同じではありませんinterface2.x

于 2013-01-12T07:00:01.933 に答える