A invocação de métodos com ligação tardia abre uma possibilidade de invocar construtores cujo comportamento poderia ser diferenciado polimorficamente. A título de exemplo, considere o seguinte código envolvendo uma classe Derivada e uma classe Base cujo construtor invoca um método implementado na classe derivada e apresenta o seguinte resultado.
O resultado dessa execução pode ser explicado pela seqüência de ações que é obedecida para a construção de um objeto a partir do momento no qual seu construtor é invocado. O comportamento apresentado nesse exemplo pode ser diferente daquele intuitivamente esperado por um programador que esteja analisando um código onde esta situação. Em um programa de maior porte, pode levar a situações de erro de difícil detecção.
A recomendação que se faz com relação à utilização de métodos no corpo de construtores é
Não invoque métodos no corpo de construtores a menos que isto seja seguro.
Métodos seguros para invocação a partir de construtores são aqueles que não podem ser redefinidos.
© Ivan Luiz Marques Ricarte
DCA/FEEC/UNICAMP