Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы Рыков.docx
Скачиваний:
103
Добавлен:
21.04.2015
Размер:
305.38 Кб
Скачать

Локальные классы (local classes)

Локальные классы — это классы, объявленные в блоке операторов между фигурными скобками. Например, локальные классы, объявленные в теле метода.

Объявление локальных классов

Вы можете объявить локальный класс внутри любого блока операторов. Например внутри методов, циклов или операторов if.

Доступ к переменным в локальных классах

Локальный класс имеет доступ к членам класса, в котором он объявлен. В предыдущем примере конструктор PhoneNumber обращается к полюLocalClassExample.regularExpression.

Также, локальный класс имеет доступ к локальным переменным. Локальные классы имеют доступ только к переменным, объявленным как final. Когда локальный класс обращается к локальной переменной, происходит «захват»  этой переменой. Например, конструктор PhoneNumber имеет доступ к локальной переменной numberLength  потому что она объявлена как final; numberLength — захваченная переменная.

Анонимные классы (Anonymous Classes)

Анонимные классы позволяют сделать ваш код более кратким. Анонимные классы позволяют одновременно объявить класс и создать его экземпляр. Анонимные классы, в отличие от локальных, не имеют имени. Используйте анонимные классы, если локальный класс нужен вам единожды.

Объявление анонимных классов

В отличие от объявления обычных классов, объявление анонимных классов происходит внутри выражения.

Синтаксис анонимных классов

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

Определение анонимного класса содержит:

  • Оператор new

  • Имя интерфейса для реализации или класса для наследования. В этом примере класс реализует интерфейс HelloWorld.

  • Скобки, также как и при создании обычных объектов. В данном случае мы реализуем интерфейс, поэтому скобки пустые.

  • Тело класса.

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

Доступ к локальным переменным. Определение и доступ к полям анонимных классов

Также как и локальные классы, анонимные могут захватывать переменные, доступ к локальным переменным происходит по тем же правилам:

  • Анонимный класс имеет доступ к полям внешнего класса.

  • Анонимный класс не имеет доступ локальным переменным области, в которой он определен, если они не финальные (final) или неизменяемые (effectively final).

  • Как и у других внутренних классов, объявление переменной с именем, которое уже занято, затеняет предыдущее объявление.

Анонимные классы имеют те же ограничения, что и локальные:

  • Вы не можете определять статические члены анонимного класса.

  • Анонимный класс может содержать статические поля, если это константы.

Анонимные классы также могут содержать в себе локальные классы. Конструктора в анонимном классе быть не может.

38.Интерфейсы языка Java. Типизация и интерфейсы. Члены интерфейсов языка Java. Наследование интерфейсов. Реализация интерфейсов классами. Назначение и использование интерфейсов при программировании на языке Java.

Интерфейсы

Интерфейсы Java созданы для поддержки динамического выбора (resolution) методов во время выполнения программы. Интерфейсы похожи на классы, но в отличие от последних у интер­фейсов нет переменных представителей, а в объявлениях методов отсут­ствует реализация. Класс может иметь любое количество интерфейсов. Все, что нужно сделать — это реализовать в классе полный набор методов всех интерфейсов. Сигнатуры таких методов класса должны точно совпадать с сигнатурами методов реализуемого в этом классе интерфейса. Интер­фейсы обладают своей собственной иерархией, не пересекающейся с классовой иерархией наследования. Это дает возможность реализовать один и тот же интерфейс в различных классах, никак не связанных по линии иерархии классового наследования. Именно в этом и проявляется главная сила интерфейсов. Интерфейсы являются аналогом механизма множественного наследования в C++, но использовать их намного легче.

  Оператор interface

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