Разработаем новую реализацию 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
}