Java如何确定接口是否不一致?

Java如何确定接口是否不一致?,java,interface,compiler-errors,Java,Interface,Compiler Errors,特别是,在编译/运行时,在接口不一致的情况下会发生什么错误 接口示例: public interface Interface1 { int NUM = 0; } public interface Interface2 { int NUM = 1; } 这有一个编译器错误: public class Test implements Interface1, Interface2 { public static void main(String[] args) { System.ou

特别是,在编译/运行时,在接口不一致的情况下会发生什么错误

接口示例:

public interface Interface1 {
  int NUM = 0;
}
public interface Interface2 {
  int NUM = 1;
}
这有一个编译器错误:

public class Test implements Interface1, Interface2 {
 public static void main(String[] args) {
   System.out.println(NUM);
 }
}
这运行得很好:

public class Test implements Interface1, Interface2 {
 public static void main(String[] args) {
   System.out.println("anything");
 }
}

当java遇到
NUM
时,它会从接口中找到定义。它不能同时检查两者,所以为什么不使用
Interface1
(最先实现的)中的定义呢?它是为了检查所有接口的一致性而设计的吗?

基本上,这里的-
Interface1
有一个字段,而
Interface2
有一个字段。它们都在实现类中使用,但哪一个“赢”还没有定义。如果
Interface1.NUM
为100,而
Interface2.NUM
为1000,该怎么办?那么这种行为会是什么呢?如果行为不一致-有时在运行期间变为100,有时变为1000,该怎么办


对于“第一个”定义的是哪个
NUM
,这是不明确的。并没有关于哪个接口被实际接受为序列中的“第一个”接口的规范。Java对实现的了解不够,无法信任一个实现而不信任另一个实现,因此放弃了,因为这两个实现都太模糊,无法让运行时做出判断调用。

你说的“它不能同时检查这两个实现”是什么意思?为什么不使用Interface2中的定义?为什么不发明一种新的价值观呢?为什么不抛出一个异常呢?因为,编程语言应该是一致的,而您希望Java实现的行为是不一致的:它将创建一个意外的行为,所以很好,您得到了一个编译错误!这种冲突是不常见的,但您可以将这种可能性添加到在接口中放置常量的原因列表中。这不是“不一致”接口的情况。这是一个简单的名字冲突,但这并不是真正的菱形图案;没有公共基类。