Qual é a verdadeira utilidade da palavra resevada FINAL?

Olá pessoal, estou estudando POO utilizando a linguagem JAVA. Estou com dúvida sobre a palavra reservada FINAL.
Eu verifiquei em uma apostila que diz:
Podem ocorrer situações em que não seja desejável permitir que eventuais subclasses sobrescrevam métodos de uma superclasse.
Os metodos declarados como private são implicitamente final porque é impossivel sobrescreve-los em uma subclasse.

Não entendi o verdeira utilidade da palavra final, pois caso seja necessario eu posso utilizar tranquilamente o PRIVATE.

Desde já agradeço pelos os esclarecimentos.

uma variável final uma vez atribuído um valor a ela esse valor não pode ser modificado
e se não me engano vc pode atribuir um valor a ela apenas na sua declaração ou no construtor da classe.

vc pode usar final em algumas situações

uma classe final não pode ser extendida : ex String

  • isso é importante quando vc projeta a classe de forma a proibir a herança

um metodo pode ser final - ele não pode ser sobreescrito

  • exemplo a classe Thread possui um metodo chamado isAlive que, se vc sobreescrever, teria as mais exoticas reações dentro da maquina virtual java.

um atributo pode ser final - uma vez definido vc nao pode mudar a referencia do objeto.

  • util quando vc quer trabalhar com imutabilidade.

um argumento pode ser final

  • ele não pode ter o seu valor alterado dentro do metodo

faça uns exemplos :wink:

1 curtida

Olá peczenyj!
Pelo que vejo o FINAL é uma constante, fui certo na minha colocação?
Pois uma classe que não seja extendida eu posso utilizar o private, correto?

[quote=peczenyj]vc pode usar final em algumas situações

uma classe final não pode ser extendida : ex String

  • isso é importante quando vc projeta a classe de forma a proibir a herança

um metodo pode ser final - ele não pode ser sobreescrito

  • exemplo a classe Thread possui um metodo chamado isAlive que, se vc sobreescrever, teria as mais exoticas reações dentro da maquina virtual java.

um atributo pode ser final - uma vez definido vc nao pode mudar a referencia do objeto.

  • util quando vc quer trabalhar com imutabilidade.

um argumento pode ser final

  • ele não pode ter o seu valor alterado dentro do metodo

faça uns exemplos ;-)[/quote]

A palavra reservada final (minusculo, java e case sensitive) serve para dizer que a "coisa" é final ou seja, o que foi decidido não pode ser modificado. Isto é diferente de constante. Em java não ha constantes , ha variáveis que só podem ser modificadas 1 vez.

classe -> proibe herança (portanto não pode ser usado junto com abstract)
métodos -> proibe sobre-escrita.
métodos estáticos -> proibe sobre-carga em classes filhas (métodos estáticos não são herdados,mas podem ser sobrecarregados, o que pode gerar imensa confusão)
atributos -> proibe que o valor seja alterado. Repare que não proibe que o valor seja setado, mas uma vez setado, ele não mudará mais. Em particular todos os atributos final têm que estar setados antes do construtor terminar.
variáveis -> proibe que o valor seja alterado depois de setado. Em particular apenas variáveis finais podem ser passadas para classes anonimas aninhadas.