特别是,在编译/运行时发生什么事情会在接口不一致时产生错误?
示例接口:
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
中的定义(首先实现)?它是否旨在检查所有接口的一致性?
答案 0 :(得分:2)
基本上,你在这里得到的是diamond problem - Interface1
有一个字段,而Interface2
有一个字段。它们都用在他们的实施课程中,但是哪一个"胜利"未定义。如果Interface1.NUM
为100且Interface2.NUM
为1000,该怎么办?那会是什么行为?如果行为不一致怎么办 - 有时在运行期间变为100,有时它是1000?
关于哪个NUM
被定义"第一个"是不明确的。没有规定哪个界面实际被接受为"第一个"一个顺序。 Java对实现的了解不足以相互信任一个实现,所以它放弃了 - 它们都太模糊了,不能让运行时进行判断调用。