为什么类编译为.class但接口不编译为.interface

Rav*_*sha 10 java interface

是否有任何具体原因导致接口未编译成编译成.interface文件的MyInterface.java?但是任何类都被编译成.class文件.

b.r*_*oth 14

因为要点是指示文件是Java字节代码(而.class是为其选择的扩展名),而不是特定的语言结构.


Boz*_*zho 6

文件系统上字节代码的物理表示无关紧要.

重要的是逻辑实现(无论是类还是接口).

  • 我认为正确的答案 - 从我记忆中的Java语言规范,编译器输出如何存储在文件系统中实际上并不是语言定义的一部分.这只是一个共同的惯例.但是类文件可以直接写入一些时髦的数据库. (3认同)

Tim*_*sen 6

Java将接口视为类似于类,例如它们共享相同的命名空间(您不能拥有与类同名的接口),并且编译的接口几乎与编译的抽象类相同.

因此,将它们以不同的格式存储或使用不同的文件扩展名是没有任何意义的.相反,这会使许多事情变得更难.例如,当您按名称加载类或接口(Class.forName("my.class.name"))时,Java不知道它是类还是接口.如果有两个不同的扩展,Java会尝试找到一个文件"my/class/name.class",然后是"my/class/name.interface",而不是只尝试第一个.

  • 当给出仅作为字符串的名称时,Class.forName()无法知道参数是类还是接口.否则,您将需要另一种接口方法(或一个参数来告诉类加载器要加载什么,或者接口的特殊类).当然,Java可能被设计为处理与类完全不同的接口.但是,如果有一个更简单的解决方案,为什 (2认同)