Вложенные интерфейсы в языке Java

Вложенные интерфейсы в языке Java

Интерфейс может бьrгь объявлен членом класса или другого интерфейса. Такой интерфейс называется иитерфейсом-членом или вложенным иитерфейсом.

Вложенный интерфейс может быть объявлен как public, private или protected. Этим он от­личается от интерфейса верхнего уровня, который должен бьrгь объявлен как pub­lic или использовать уровень доступа по умолчанию.

Когда вложенный интерфейс используется за пределами объемлющей его области дей­ствия, его имя должно быть дополнительно уточнено именем класса или интерфей­са, членом которого он является.

Это означает, что за пределами класса или интер­фейса, в котором объявлен вложенный интерфейс, его имя должно бьrгь уточнено полностью.

В следующем примере демонстрируется применение вложенного интерфейса:

//    

//       

class FirstClass {

    // ,   

    public interface NiceNested {
        boolean isNotPositive(int x);
    }

}

//  SecondClass   

class SecondClass implements FirstClass.NiceNested {

    public boolean isNotPositive(int x) {
        return x >= 0 ? false : true;
    }

}

class NestedInterface {

    public static void main(String args[]) {

        //     
        FirstClass.NiceNested iface = new SecondClass();

        if(iface.isNotPositive(-102030)) {
            System.out.println(" -102030  ");
        }

        if(iface.isNotPositive(50033)) {
            System.out.println("   ");
        }
    }
}

После запуска программы получаем:

pro-java@admin:~$ javac NestedInterface.java 
pro-java@admin:~$ java NestedInterface
 -102030  
pro-java@admin:~$

Обратите внимание на то, что в классе FirstClass определяется вложенный интерфейс NiceNested объявленный как public. Затем вложенный интерфейс реализуется в классе SecondClass следующим образом:

class SecondClass implements FirstClass.NiceNested

Обратите также внимание на то, что имя интерфейса полностью уточнено и содержит имя класса. В теле метода main() создается переменная iface ссылки на интерфейс FirstClass.NiceNested, которой присваивается ссылка на объект класса SecondClass.

И это вполне допустимо, поскольку класс SecondClass реализует интерфейс FirstClass.NiceNested.

Интересное видео по теме вложенных интерфейсов:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *