我有一个java代码,无法理解界面

时间:2013-09-23 10:18:35

标签: java interface

这是代码 我有三个接口

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
}

如何回答这个问题或如何解决这个问题。

6 个答案:

答案 0 :(得分:5)

  

如何回答这个问题或如何解决这个问题。

不要在界面中使用字段,或者必须使用它们,并且必须具有相同的名称,只需完全限定它们:

System.out.println(i3.x);

请注意,对于import static,导入包含常量的接口的“简洁”原因已被删除 - 接口实际上只应出于真正的行为原因而实现。有关此方面的更多建议,请参阅Effective Java 2nd edition。

答案 1 :(得分:0)

这是因为在所有接口中定义了相同的字段,因此它不知道在这3个字段中使用哪个字段。

  • 您必须指定接口名称。
  • 代码应该在某个init块或方法中。
  • System.out.println而非system

此外,您的类型名称应以大写字母

开头
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);
}

}

答案 2 :(得分:0)

在所有3接口变量x中都有,所以它显示不明确。 编译器会混淆从i1或i2或i3

打印哪个x

答案 3 :(得分:0)

接口旨在演示类结构。如果必须在多个接口中声明字段并在一个类中使用所有这些接口,则应明确声明要用于该变量的接口。

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中声明的所有函数。

答案 4 :(得分:0)

不要这样做。这称为常量接口反模式。或者只使用完全限定名称。

答案 5 :(得分: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是公共最终整数x。 内部编译器将其转换为最终意味着将其视为常量。

这就是为什么当用户打印x的值时,编译器会为此提供不明确的错误。

实际执行此请使用-javap工具,该工具位于jdk。

用法:javap I1