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