Ответ 1
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 { ... }
...
}