Javanese Online

Анонимные классы

Разработаем новую реализацию MobilePhone, у которой будет экран c электронными чернилами — EInkPhone. У такого экрана нет понятия «включён»/«выключен», и его реализация будет крайне простой.

Кроме именованных классов есть ещё анонимные. У них нет явного имени.

public class EInkPhone implements MobilePhone {

    private final Screen screen = new Screen() {

        // тело анонимного класса

        @Override
        public boolean isBackLightEnabled() {
            return false;
        }
    };

    ...

    @Override
    public Screen getScreen() {
        return screen;
    }

    @Override
    public void unlock() {
        // экран и без того «включён»
    }

}

Анонимный класс может реализовывать только один интерфейс либо наследовать один класс.

Технически анонимные классы являются разновидностью внутренних, т. е. им доступны поля внешнего класса.

Если анонимный класс объявлен в теле метода, ему доступны все финальные локальные переменные. Это называется захватом области видимости (visibility scope capturing).

public static void main(String[] args) {
    final String local = "some text here";
    Object obj = new Object() {
        @Override
        public String toString() {
            return "captured: " + local;
        }
    }
    System.out.println(obj);
    // captured: some text here
}
Комментарии к уроку

Сообщить об ошибке

Javanese.Online в GitHub

Чаты и каналы в Telegram

RSS-лента