Компилятор использует термин "класс" немного свободно. Более общим термином может быть «тип». Я предполагаю, что компилятор использует термин «класс», потому что он создает файлы «.class» одного и того же формата из каждого объявления типа (class
, interface
и enum
).
Интерфейс не должен быть public
. Если он объявлен без модификатора доступа, к нему можно получить доступ только в его «пакете».
Тип Java может (должен) быть объявлен в пакете. Пакеты - это набор типов Java, которые должны создаваться и развертываться вместе. По умолчанию все типы в пакете импортируются неявно, поэтому, если ваш интерфейс находится в одном пакете, он будет доступен для класса HelloWorld
.
Когда вы не объявляете пакет, тип находится в пакете по умолчанию. Таким образом, даже если вы просто поместите интерфейс IServiceAnnouncer
в отдельный файл, он будет доступен для HelloWorld
. Просто скомпилируйте оба файла одновременно.