Вложенные интерфейсы

Интерфейс может быть объявлен членом класса или другого интерфейса. Такой интерфейс называется интерфейсом-членом или вложенным интерфейсом. Вложенный интерфейс может быть объявлен как public, private или protected. Это отличает его от интерфейса верхнего уровня, который должен быть либо объявлен как public, либо, как уже было отмечено, должен использовать уровень доступа, заданный по умолчанию. Когда вложенный интерфейс используется вне содержащей его области определения, он должен определяться именем класса или интерфейса, членом которого он является. То есть вне класса или интерфейса, в котором объявлен вложенный интерфейс, его имя должно быть полностью определено.

// Пример вложенного интерфейса.
// Этот класс содержит интерфейс-член.
class А {
public interface NestedlF {
boolean isNotNegative(int x);
// Класс В реализует вложенный интерфейс.
class В implements A.NestedlF {
public boolean isNotNegative(int x) {
return x < 0 ? false : true;
}
class NestedlFDemo {
public static void main(String args[]) {
// использует ссылку на вложенный интерфейс
A.NestedlF nif = new B();
if(nif.isNotNegative(10))
System.out.println("10 не является отрицательным");
if(nif.isNotNegative(-12))
System.out.println("это не будет отображаться");
}
}

Обратите внимание, что объект А определяет интерфейс-член NestedlF, который объявлен как public. Затем объект В реализует вложенный интерфейс путем указания:

implements A.NestedlF

Обратите также внимание, что имя интерфейса полностью определено и содержит имя класса. Внутри метода main () создается ссылка на A.NestedlF, получившая имя nif, которой присваивается ссылка на объект в. Поскольку объект в реализует A.NestedlF, это допустимо.