Erros podem ocorrer quando um construtor chama um m�todo n�o "final" de sua classe.
Esse tipo de erro pode n�o ser comum. Entretanto, tendo o conhecimento de sua exist�ncia,
poder� economizar uma boa parte do seu tempo ao encontr�-lo.
 
Um construtor de uma classe � invocado quando uma nova inst�ncia dessa classe � criada.
A proposta de um construtor � inicializar um objeto.
 
Quando um construtor � carregado, nele podem conter chamadas a m�todos
que fazem parte dessa mesma classe.  Isso acontece frequentemente
pois alguns m�todos possuem c�digos de inicializa��o.
 
Por exemplo:
 
class Base
{
  private int valor;
  Base()
  {
    valor = pesquisa();
  }
 
  public int pesquisa()
  {
    // faz consulta no Banco de Dados    
    int numero = consultaDB();   
    // retorna numero = 5 para ilustra��o
    return 5;
  }
 
  public int getValor()
  {
    return valor;
  }
}
 
O construtor da classe Base chama um m�todo n�o final, "pesquisa()", para recuperar alguma
informa��o do banco de dados. Esse c�digo funciona como esperado, inst�nciando a vari�vel "valor",
da classe "Base", com o valor 5.
 
Veja o que acontece se uma classe derivada substitui o m�todo "pesquisa()" da classe "Base".
Dependendo de como a substitui��o � feita, ela pode confundir o resultado.
 
Veja esse exemplo:
 
class Derivada extends Base
{
  private int numero = 10;

  public int pesquisa()
  {
    return numero;
  }
}
 

class Teste
{
  public static void main(String args[])  {
    Derivada d = new Derivada();
    System.out.println("Resultado de d.getValor(): " +  d.getValor());
  }
}
 
Ao rodar a classe Teste ir� resultar em:
 
Resultado de d.getValor(): 0
 
-----------------------------------------
 
O problema � que o m�todo "pesquisa()" da classe "Derivada" retorna o valor 0.
Voc� poderia querer saber como isso aconteceu. Ent�o vamos lah ...
 
O m�todo retorna o valor de inst�ncia da vari�vel "numero", o qual � assinada com o valor 10 durante a
inst�ncia da inicializa��o da vari�vel. Entretanto, a inicializa��o da inst�ncia da variavel da classe "Derivada"
n�o tinha acontecido at� o momento do m�todo "pesquisa()" ser executado.
 
O m�todo "pesquisa()" � chamado de dentro do construtor da classe "Base" durante a constru��o de um objeto
da classe "Derivada". Quando o m�todo "pesquisa()" da classe "Derivada" entra em a��o, a inicializa��o da inst�ncia
da sua vari�vel ainda n�o tem sido executada. Suas vari�veis somente possuem valores de inicializa��o padr�o.
Nesse caso, "valor" tem iniciado com "0". Assim, o m�todo retorna "0".
 
Esse erro pode ocorrer quando um construtor de uma classe chama um m�todo n�o "final" de sua classe.
Um problema ocorre se esse m�todo � substitu�do por uma classe derivada e aquele m�todo
retorna um valor que j� foi inicializado durante a inicializa��o da inst�ncia da vari�vel.
 
Pegue os exemplos acima e teste voc� mesmo ...
 
 
[]s

 Bruno Reded
 -+=+=+=+=+=+=+=+=+=+=+=+=+-
 Picture Internet -  S�o Paulo - Brazil
 [EMAIL PROTECTED]
 
"Entrega o teu caminho ao Senhor; confia Nele, e Ele tudo far�".
 Salmo 37:5

Responder a