Java

Saturday, May 06, 2006

 

Construtores

Ao definir uma classe sem um construtor, o compilador irá definir implicitamente um construtor sem argumentos. Se, no entanto, você escreve um construtor, seja ele com ou sem argumentos, então o construtor não providencia nenhum construtor implicitamente. A primeira linha de um construtor deve ser super() ou this(). Se nenhum dos dois métodos é escrito explicitamente, o compilador irá inserir implicitamente super(). Ambas chamadas não podem ser declaradas no corpo do mesmo construtor, ou this(), ou super(). Repare, no entanto, que, em algum momento, haverá a chamada para o construtor da superclasse por meio do super(). Caso a superclasse não tenha um construtor sem argumentos, então você deverá chamar explicitamente, no construtor da classe herdeira, o construtor com argumentos da superclasse. Vejamos um exemplo:

public class Animal{
public Animal(String s){}
}

public class Dog extends Animal{}

O código acima não compila, pois o compilador irá gerar implicitamente um construtor na classe Dog que chama o construtor sem argumentos da superclasse por meio do super(), mas não há um construtor sem argumentos na classe Animal. Neste caso, o construtor de Dog deve ser explicitamente escrito e o construtor com argumentos da classe Animal chamado por meio de super(objeto_string).

Construtores não podem ter retornos e devem ter o mesmo nome da classe. O construtor providenciado pelo compilador, quando não há nenhum explícito na classe, tem o mesmo nível de acesso que a classe. Construtores podem ser declarados como private. Outro detalhe importante é que os métodos de uma instância só podem ser chamados depois que super() foi executados. O seguinte código, portanto, é ilegal:

public class Dog{
public Dog(){
eat();
this(5);
}
public Dog(int n){
}

public void eat();
}

O compilador irá adicionar implicitamente a chamada a super() no construtor com argumentos, mas o código não irá compilar ainda assim, pois no construtor sem argumentos há uma chamada a um método de instância, a saber, eat(), antes que ocorra a chamada de super. Antes do método super(), somente métodos estáticos podem ser chamados.

Comments: Post a Comment



<< Home

Archives

March 2006   April 2006   May 2006   July 2006   August 2006  

This page is powered by Blogger. Isn't yours?