java 编译器如何检查接口中的所有方法是否都已实现?

How does the java compiler check if all methods in an interface were implemented?

如果我声明我的对象实现了一个接口,但是没有实现那些方法,当我编译我的代码时,我会得到一个编译器错误。 java 编译器如何知道我没有实现接口的所有方法?

How does the java compiler know that I haven't implemented all of the methods of an interface?

它知道你的class实现的所有方法,因为它在编译过程中找到并分析了它们。

它知道在您的 class 的所有超classes 和接口中定义的所有方法,因为:

  1. 它要么刚刚编译了他们的源代码,要么加载了他们的“.class”文件,并且

  2. 它分析了接口/classes 并找出了哪些方法需要由您的 class 实现。

然后比较两组方法。 (注意,方法不需要完全相同。例如,实际方法可以 return 接口中方法的 return 类型的子类型。集合比较需要采取考虑到这一点。)


(实际上,这只是进行此检查的一种方法。实际的 Java 编译器可能会以不同的方式进行检查。)