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

时间:2010-02-10 11:54:19

标签: java interface

有没有具体原因为什么接口没有编译成编译成.interface文件的MyInterface.java?但是任何类都被编译成.class文件。!

6 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:6)

文件系统上字节码的物理表示并不重要。

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

答案 2 :(得分:5)

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

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

答案 3 :(得分:4)

这就是语言设计师决定的方式。

这在几个方面都有道理:

  • .class文件是您通常不会手工查看或操作的副产品。
  • 程序使用的扩展程度越小,维护就越容易。
  • 在很多情况下,类和接口之间的代码没有区别,因此二进制文件看起来很相似。

坦率地说,我想不出有一个很好的理由对编译的类和接口有不同的扩展。为什么区分它们很重要?

答案 4 :(得分:3)

在java中,您有源文件,称为.java和名为.class的二进制文件。它只是一个命名选择。

对于java类和接口来说,差别不大(类只包含很多额外的信息,比如方法体)。

答案 5 :(得分:1)

这只是他们的选择。我不打扰它。无论如何,它是一个二进制文件。一种思考方式是“即使它是一个仍然在file.java中的接口”。