Ответ 1
Спецификация Java о final
methods говорит:
A
private
и все методы, объявленные сразу в классеfinal
(§8.1.1.2), ведут себя так, как будто ониfinal
, так как их невозможно переопределить.
и Анонимные объявления классов:
Анонимный класс всегда неявно
final
(§8.1.1.2).
Следовательно, анонимный класс уже final
, что делает все его методы final
. Вы можете добавить модификатор final
, но он является избыточным.
Интересный комментарий Sotirios Delimanolis показывает, что API Reflection фактически не сообщает модификатор final
для анонимного класса:
public class Main {
public static void main(String[] args) {
Main anon = new Main() {};
System.out.println(Modifier.isFinal(anon.getClass().getModifiers())); // prints false
}
}
Это, по-видимому, известный баг (JDK-8129576), который планируется установить на Java 9.