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.
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.
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
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.