Método, Variável e Classe Final

Basicamente o modificar final é aplicado da seguinte maneira:

  1. Variável: Uma variável final não pode ter o seu valor alterado
  2. Método: Um método final não pode ser sobrescrito
  3. Classe: Uma classe final não pode ser estendida

Sendo assim, é importante saber que você dever ter algumas coisas em mente antes de sair declarando tudo como final, principalmente classes e métodos, pois alguns princípios de orientação a abjetos (veja aqui e aqui) são quebrados quando esse modificador é utilizado de forma indiscriminada.

Mas também tem o outro lado, pois em muitos casos o modificador final garante a segurança, como podemos ver na classe String.

Linguagens como Ruby permitem que você mude (não sei se mude é a palavra mais apropriada) a classe String, por um lado isso é ótimo, pois garante mais flexibilidade, mas por outro lado pode ser perigoso, e exige conhecimento do que você está fazendo.

Agora vamos para as regras:

Variável Final

Uma Variável final não pode ter ser valor alterado. Sendo assim, quando declaramos uma variável assim:

Não podemos alterar seu valor, e caso você tente alterar ocorrerá uma exceção, exemplo:

Ao tentar rodar essa classe você verá a exceção: VarFinal.java:6: cannot assign a value to final variable idade.

Lembrado que se essa variável for um atributo de um objeto ela deve ter o seu valor inicializado, pois as variáveis finais não são inicializadas com valor default.

Argumento Final

Além de ser usado em variáveis, métodos e classe o modificador final também pode ser utilizado nos argumentos, e como ver em código é melhor do que em texto, vamos a mais uma classe:

Só lembrando que também não podemos alterar o valor de um argumento final, e se você insistir em tentar o compilador reclamará: ArgFinal.java:4: final parameter idade may not be assigned

Método Final

O modificador final normalmente é utilizado em métodos importantes para o programa, e que não podem ter o seu comportamento alterado (voltamos ao exemplo da classe String), e se tentarmos sobrescrever um método final, vai aparecer uma exceção igual ao próximo exemplo:

A classe MaeFinal compila sem nenhum problema, mas ao tentar compilar a classe FilhaFinal teremos a seguinte exceção: FilhaFinal.java:2: imprimeOi() in FilhaFinal cannot override imprimeOi() in MaeFinal; overridden method is final.

Classe Final

E finalmente, as classes finais (que trocadilho ridículo)…

As classes marcadas com o modificador final não podem ser herdadas (ter subclasses/classes filhas), sendo assim nenhuma classe pode reaproveitar as funcionalidades dela.

Bom, mas vamos ao código em Java:

E mais uma vez, se tentarmos executar a classe FilhaFinal, teremos a seguinte exceção: FilhaFinal.java:1: cannot inherit from final MaeFinal.

É importante lembrar que uma classe não pode ser marcada como final e abstract ao mesmo tempo, final e abstract são praticamente o oposto, enquanto com final uma classe não pode ser estendida, com abstract ela deve ser estendida.

Chegamos ao final de mais um post, e em breve estarei escrevendo também sobre minha nova experiência com Ruby, comecei a estudar agora (claro que em “banho Maria”) e estou tendo uma boa impressão, e não é só outra linguagem de programação, é um novo conceito (outro modo de solucionar um problema)… E é claro que eu vou escrevendo sobre esses conceitos na medida em que eu for estudando.

Gabriel Rubens

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">