A интерфейс верхнего уровня не может быть закрытым. Он может иметь только public
или доступ к пакету. Из Спецификации языка Java, раздел 9.1.1: «Модификаторы интерфейса» :
Защищенные и закрытые модификаторы доступа относятся только к интерфейсам-членам, объявления которых непосредственно заключены в объявление класса (§8.5.1).
A вложенный интерфейс может иметь значение private
всякий раз, когда он и его подклассы, если таковые имеются, являются подробностями реализации своего класса верхнего уровня .
Например, вложенный интерфейс CLibrary
, приведенный ниже, используется в качестве детали реализации класса верхнего уровня. Он используется исключительно для определения API для JNA, передаваемого интерфейсом Class
.
public class ProcessController {
private interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary) Native.loadLibrary( "c", CLibrary.class );
int getpid();
}
public static int getPid() {
return CLibrary.INSTANCE.getpid();
}
}
В качестве другого примера этот частный интерфейс определяет API, используемый частными вложенными классами, реализующими пользовательские символы форматирования.
public class FooFormatter {
private interface IFormatPart {
/** Formats a part of Foo, or text.
* @param foo Non-null foo object, which may be used as input.
*/
void write( Foo foo ) throws IOException;
}
private class FormatSymbol implements IFormatPart { ... }
private class FormatText implements IFormatPart { ... }
...
}