Amigos,
Estive estudando alguns códigos que possuem vários construtores numa só classe. Sei que os construtores são modeladores de objetos,
contruo objetos, seguindo o padrão de meus construtores mas, por que colocar vários numa classe? alguém tem um exemplo prático
quando estava desenvolvendo algum código? O código que vi era esse:
[code]package JAVA_OO;
public class Carro {
private String marca;
private int numPortas;
private char tamanho;
public Carro(){
marca=“GM”;
numPortas=3;
tamanho=‘g’;
}
public Carro(String m){
marca=m;
numPortas=3;
tamanho=‘g’;
}
public Carro(String m, int n){
marca=m;
numPortas=n;
tamanho=‘g’;
}
public Carro(String m,int n, char t){
marca=m;
numPortas=n;
tamanho=t;
}
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public int getNumPortas() {
return numPortas;
}
public void setNumPortas(int numPortas) {
this.numPortas = numPortas;
}
public char getTamanho() {
return tamanho;
}
public void setTamanho(char tamanho) {
this.tamanho = tamanho;
}
}[/code]
e esse pra executar:
[code]
package JAVA_OO;
public class CarroTeste {
public static void main(String[] args) {
Carro c1=new Carro();
Carro c2=new Carro(“FORD”);
Carro c3=new Carro(“MERCEDES”,5);
Carro c4=new Carro(“FIAT”,3,‘g’);
System.out.println(c3.getMarca());
System.out.println(c2.getMarca());
System.out.println(c1.getMarca());
System.out.println(c4.getMarca());
Por exemplo, o primeiro apenas cria o Carro com os atributos já preenchidos. O segundo construtor já exige que seja explicitado a informação do atributo marca e assim segue para o terceiro, que exige além da marca, o número de portas . Então no fim, você tem várias opções para modelar o objeto.
Tem dois motivos:
a) Criar construtor que aceitem parâmetros de tipos diferentes.
É o caso da classe BigDecimal. Que pode aceitar uma inicialização com int, double, String ou char[].
b) Criar construtores mais simples, que já forneçam valores padrão para propriedades menos importantes.
Por exemplo, a classe Vector possui um construtor padrão (vazio) e um construtor que permite pré-alocar uma determinada quantidade de memória (opcional);
List<String> vector = new Vector<String>(50);
List<String> vector2 = new Vector<String>();
Note que o Vector é uma estrutura dinâmica, cresce sozinho. Então, fornecer ou não o parâmetro é totalmente opcional. E, muitas vezes, o desenvolvedor sequer saberia de antemão que valor usar ali.
Agora, um construtor opcional se tornou interessante pois permite que quem já sabe quantos elementos vai guardar ganhe um pouco de performance.