Um Pouco Sobre Abstração e Finalização de Classes Pt 2
Autor: Rafael | Publicado: 2011-05-17T17:01:00-07:00

Boa noite pessoal hoje vamos falar um pouco sobre finalização de classes vulgo (Final Classes).

O que são classes finalizadas? bom isso é bem simples de explicar uma classe finalizada é toda classe que não deve ser estendida ou seja quando eu declaro uma classe como finalizada estou dizendo para o meu compilador que NENHUMA CLASSE sob circunstância nenhuma deve extender essa classe (Extends) vamos apresentar um exemplo:

public final class Caneta{
&nbsp;&nbsp;&nbsp; private Cor corCaneta;
&nbsp;&nbsp;&nbsp; private TipoCaneta tipoCaneta;
&nbsp;&nbsp;&nbsp; public void escreveTexto(String texto){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //write something
&nbsp;&nbsp;&nbsp; }
}

Se eu tentar extender a classe Caneta como por exemplo:

public class CanetaExtendida extends Caneta{
&nbsp; &nbsp; //Do something 
}

Na hora de compilar a nossa classe o compilador vai apresentar o seguinte erro:

"The type CanetaExtendida cannot subclass the final class Caneta" (caso da Eclipse IDE)


Conclusão:

Classes finalizadas não são usadas normalmente no dia a dia, somente em casos raros em que são realmente necessárias tal como restringir o acesso a uma arvore de classes por exemplo:

*Diagrama

Classe Carro -
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; Classe Carro Esporte
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; -&gt; Classe Final Eclipse 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; Classe Carro Sedan
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; Classe Final Honda Civic

Nesse exemplo eu quis dizer que temos duas subclasses de carro que são Carro Esporte e Carro Sedan, ambas classes podem ser extendidas e ter seus comportamentos modificados pelas classes filhas, porém eu não posso extender uma classe que representa o carro Eclipse pois a mesma ja tem a sua especialização implementada com as suas próprias especificações, o mesmo vale para a classe final Honda Civic, são casos raros porém bem uteis quando quero abstrair o mundo real no mundo orientado a objetos.

A todos os meus leitores, gostaria que deixassem comentários enviando sugestões, criticas, elogios, e como sempre se algum de vocês detectarem um erro de sintaxe, de lógica, ou de português mesmo deixem nos comentários, criticas são bem vindas, obrigado e abraço a todos !.