Quando usar final?

Li que devemos usar o classes final para garantir que não hajam subclasses de uma superclasse onde seus métodos são suficientes para serem usados em qualquer contexto da aplicação, mas nesse caso não deveriamos marcar tudo que não será herdado no sistema como final?Quando devo usar o final?

Podemos dizer que algo marcado como final é “imutável” no contexto em que o mesmo está inserido. Se uma classe é final, significa que ninguém vai conseguir estende-la, logo, sobrescrever qualquer um de seus respectivos métodos. Um exemplo disso é a classe String, por n motivos.

Quando usar ? Isso é você quem deve decidir. Se você não quer classes filhas de uma classe sua, marque-a como final. Se não quer que alguém altere o valor de uma constante (é obrigatório usar final em constante, senão, qualquer um pode alterar seu valor, logo, deixa de ser constante), de uma variável de um método ou algo do gênero. Isso tudo vai depender da sua necessidade.

É igual perguntar, “Quando devemos estender uma classe?” Quando precisar sobrescrever um método é uma boa resposta, por exemplo.

Final e usado quando acaba a hierarquia de heranca. Na ultima classe. Aquele na qual ninguem mais pode herda-la.
Alem de ser usada em variaveis para declara-las como “imutaveis”.