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

时间:2015-08-01 22:37:28

标签: 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.out.println(NUM);
 }
}

这样运行得很好:

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

当java遇到NUM时,它会从界面中找到定义。它不能同时检查两者,那么为什么不使用Interface1中的定义(首先实现)?它是否旨在检查所有接口的一致性?

1 个答案:

答案 0 :(得分:2)

基本上,你在这里得到的是diamond problem - Interface1有一个字段,而Interface2有一个字段。它们都用在他们的实施课程中,但是哪一个"胜利"未定义。如果Interface1.NUM为100且Interface2.NUM为1000,该怎么办?那会是什么行为?如果行为不一致怎么办 - 有时在运行期间变为100,有时它是1000?

关于哪个NUM被定义"第一个"是不明确的。没有规定哪个界面实际被接受为"第一个"一个顺序。 Java对实现的了解不足以相互信任一个实现,所以它放弃了 - 它们都太模糊了,不能让运行时进行判断调用。