Преимущества анонимных внутренних классов точно такие же, как и для Swing;то есть они позволяют вам осуществлять обратные вызовы без «накладных расходов на программирование» отдельного файла класса.
Конечно, это все синтаксический сахар.Скомпилированный код (и производительность) для двух подходов практически одинаков.Действительно, JVM не проводит никаких различий между обычными и внутренними / вложенными классами.
Все внутреннее / внешнее содержимое области видимости разрешается во время компиляции и переводится в скрытый параметр конструктора и скрытую переменную во внутреннем экземпляреэто относится к внешнему экземпляру.Вы можете смоделировать все это самостоятельно во вложенных классах, кодируя явные параметры / переменные.Следовательно, это синтаксический сахар.
Единственное, что вы можете сделать с внутренними классами, что вы не можете сделать с отдельными классами, - это доступ к закрытым членам.Чтобы добиться этого, используя отдельные классы, вам нужно изменить соответствующие закрытые члены на пакеты private.Но я бы все равно отнес это к синтаксическому сахару ... или достаточно близко.