1. запрет расширения через наследование, если ты этого не предполагаешь на этапе проектирования класса
2. final вешается там где есть интерфейс либо не подразумевается что это что-то надо мокать (например ты не будешь мокать DateTime класс и расширять можешь не давать по дефолту).
На счет 2го. Раньше тоже так писал.
Но после того как на работе заметил что, некоторые люди экстендят все подрят. Теперь пишу final там где наследование сделает еще хуже поддержку.