Пометка классов как окончательных позволяет применять дополнительную оптимизацию на этапе JIT.
Если вы вызываете виртуальный метод для неконечного класса, вы не знаете, является ли правильная реализацияопределенный в этом классе, или некоторый подкласс, о котором вы не знаете.
Однако, если у вас есть ссылка на конечный класс, вы знаете конкретную требуемую реализацию.
Рассмотрим:
A extends B
B extends C
B myInstance = null;
if(someCondition)
myInstance = new B();
else
myInstance = new C();
myInstance.toString();
В этом случае JIT не может знать, будет ли вызвана реализация toString () в C или реализация toString () в B.Однако, если B помечен как окончательный, любая другая реализация, кроме B, не может быть правильной реализацией