В вашем примере вы хотели бы создать отдельный класс.Это из-за причины, по которой вы переопределяете метод.То есть плохая обработка событий браузера.
В частности, вы можете создать эти улучшенные Doodads в нескольких разных местах.И что произойдет, если обработка событий будет обновлена и улучшена в будущем?Вы захотите удалить все эти улучшенные Doodads и использовать правильную реализацию.Попытка найти всех своих анонимных Doodads может быть утомительной или хитрой.Принимая во внимание, что если у вас есть отдельный именованный класс, рефакторинг этого класса будет простым.
Кроме того, причиной улучшения Doodad может быть самодокументирование, если вы создадите для него отдельный класс.Принимая во внимание, что если у вас есть только анонимный класс, вам придется писать комментарии или оставлять будущим сопровождающим угадывать, почему вы сделали то, что сделали.
Например.
public class ImprovedBrowserEventHandlingDoodad extends Doodad {
...
}
Все, чтонапоминает, что замыкание обычно является хорошим кандидатом для использования анонимного класса
например.
new Thread(new Runnable() {
@Override
public void run() {
doSomething();
}
}).start();
Вы хотите что-то делать только в этом конкретном наборе обстоятельств, и нет необходимости копироватьи вставьте код куда-нибудь еще или реорганизуйте его в метод.
Обработчики событий для графических интерфейсов типичны для использования анонимных классов, поскольку их использование ограничено тем, как разрабатывается графический интерфейс, и нет необходимости создаватьотдельный экземпляр обработчика события вне определенного компонента, который его использует.Например, когда вы наводите курсор мыши на полосу прокрутки, ее внешний вид обычно меняется.Ничто другое в программе не вызовет этого изменения, и обычно обработчик события будет состоять из пары строк, сообщающих полосе прокрутки, например, изменить ее внешний вид.scrollbar.setMouseOverEffect(true);
.