这是代码 我有三个接口
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
}
如何回答这个问题或如何解决这个问题。
答案 0 :(得分:5)
如何回答这个问题或如何解决这个问题。
不要在界面中使用字段,或者必须使用它们,并且必须具有相同的名称,只需完全限定它们:
System.out.println(i3.x);
请注意,对于import static
,导入包含常量的接口的“简洁”原因已被删除 - 接口实际上只应出于真正的行为原因而实现。有关此方面的更多建议,请参阅Effective Java 2nd edition。
答案 1 :(得分:0)
这是因为在所有接口中定义了相同的字段,因此它不知道在这3个字段中使用哪个字段。
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