Почему классы компилируются.класс, но интерфейс не делает.взаимодействие

есть ли какая-то конкретная причина, по которой интерфейсы не компилируются в MyInterface.Ява компилируется в .interface файл?Но любой класс компилируется .файл класса.!

6 ответов


Java обрабатывает интерфейсы почти как классы, например, они имеют одно и то же пространство имен (вы не можете иметь интерфейс с тем же именем, что и класс), а скомпилированный интерфейс почти идентичен скомпилированному абстрактному классу.

поэтому нет смысла хранить их в другом формате или с другим расширением файла. Напротив, это многое усложнило бы. Например, при загрузке класса или интерфейса по имени (Class.forName ("my.класс.name")) Java делает не знаю, является ли это классом или интерфейсом. Если бы было два разных расширения, Java попыталась бы найти файл " my/class / name.класс", а затем " мой / class / name.интерфейс", а не только первый.


потому что смысл в том, чтобы указать, что файл байтовый код Java (and .для этого было выбрано расширение class), а не конкретная языковая конструкция.


на физическая представление байт-кода в файловой системе не имеет значения.

Это логическое реализация (будь то класс или интерфейс), которая имеет значение.


так решили языковые дизайнеры.

это имеет смысл несколькими способами:

  • .class файлы являются побочным продуктом, который вы обычно не видите или не манипулируете вручную.
  • чем меньше различных расширений использует программа, тем проще ее поддерживать.
  • во многих случаях в коде нет различия между классом и интерфейсом, поэтому логично, что двоичные файлы выглядят одинаково.

Честно Говоря, Я не могу придумать веской причины иметь разные расширения для скомпилированных классов и интерфейсов. Почему важно проводить различие между ними?


в java у вас есть исходные файлы, называемые .java и двоичные файлы вызываются .класс. Это просто выбор названия.

также для классов java и интерфейса не сильно отличаются (класс просто содержит много дополнительной информации, такой как тела методов).


Это просто выбор, который они сделали. Я бы не беспокоился об этом. Это двоичный файл в любом случае. Один из способов думать: "даже это интерфейс, он все еще находится в файле.ява."