Quando usar o construtor?

9 respostas
Rudy

Aloha pessoas!!!

Tenho uma duvida simples. Como é que eu sei quando devo colocar um ou mais construtores em minha classe?

9 Respostas

davidtiagoconceicao

Quando quizer :lol:

Brincadeiras à parte, sobrescreva seu construtor sempre que achar ser interessante permitir a criação do objeto de diversas formas (com parâmetros diferenciados, com operações diferenciadas).

Brn_SI

Eai galera !!

Kra neste caso vc nao precisa criar o construtor na classe nao pq o Java ja cria um cosntrutor automatico na sua classe. Mas caso vc quer criar e so qdo vc quer criar o objeto da classe usando parametros.
Lembrando: toda vez que vc criar um construtor passando parametros, vc tem que criar um outro contrutor vazio.

flw.

Renyo

Brn… porque devo criar um vazio ? para manter valores default ? isso não seria uma opção minha ?

B

Errado. Construtores sem parâmetros não são necessários, muito menos obrigatórios.

Marcelo_FS

Só se você quiser…

davidtiagoconceicao

Brn_SI:
Eai galera !!

Kra neste caso vc nao precisa criar o construtor na classe nao pq o Java ja cria um cosntrutor automatico na sua classe. Mas caso vc quer criar e so qdo vc quer criar o objeto da classe usando parametros.
Lembrando: toda vez que vc criar um construtor passando parametros, vc tem que criar um outro contrutor vazio.

flw.

Algumas informações que acho interessante pra evitar confusões:
Quando o programador cria uma classe e não explicita nenhum construtor, o que o compilador irá fazer é criar um construtor assim:

//o que o programador declarou e compilador lê:
class MinhaClasse{
}
//o que o compilador gera:
class MinhaClasse{
    MinhaClasse(){
        super();
    }
}

Porém, se o programador declarar ao menos um construtor, o compilador não irá gerar construtor algum. Apenas a chamada para super() que poderá ser incluída (caso não exista nenhuma chamada para super() ou this(…)), mais ou menos assim:

//o que o programador declarou e compilador lê:
class MinhaClasse{
    MinhaClasse(int parametro){
        //operacoes quaisquer
    }

}
//o que o compilador gera:
class MinhaClasse{
    MinhaClasse(){
        super();
        //operacoes quaisquer
    }
}

Assim, se o programador definir um apenas construtor com parâmetros, as subclasses deverão efetuar chamadas explícitas a este construtor, pois a chamada super() criada não irá compilar (não existe construtor sem parâmetros).

Não existe a obrigação de criar um construtor sem parâmetros: o programador pode obrigar às demais classes informar parâmetros necessários à instanciação do objeto.

Lavieri

Um exemplo pratico de quando é util criar + de um construtor, neste caso, eu posso criar diretamente um CNPJ tanto de uma String, como de um Long, como de um BigInteger, fica a escolha de quem usar a classe.... assim como posso converter o CNPJ para qualquer um destes tipos

vc usa quando facilitar para vc, com isso vc tira o trabalho de quem utiliza a classe de ele proprio ter que converter um BigInteger para String, ou um long para string para poder criar um Cnpj

/**
	 * Constroi um CNPJ com valor nulo
	 * @see #isNull()
	 */
	public Cnpj() {
		super(null);
	}
	/**
	 * Constroi um objeto {@link Cnpj} a partir de um {@link BigInteger}
	 * <BR>
	 * <BR>Qualquer numero enviado, ela será devidamente tratada, invoca 
	 * implicitamente {@link #toCnpjString(BigInteger)}, veja sua documentação para 
	 * maiores detalhes.
	 * @see #toCnpjString(BigInteger)
	 * @param cnpj {@link BigInteger} contendo o valor do cnpj
	 */
	public Cnpj(BigInteger cnpj) {
		super(toCnpjString(cnpj));
		
	}
	public Cnpj(Long cnpj) {
		super(toCnpjString(cnpj));
	}
	public Cnpj(String cnpj) {
		super(toCnpjString(cnpj));
	}
 //....
	public BigInteger toBigInteger() {
		return (isNull()) ? null : new BigInteger(toString());
	}
	public Long toLong() { 
		return (isNull()) ? null : new Long(toString());
	}
	public String toString() {
		return super.toString();
	}
Brn_SI

sim,

Mas obrigatóriamente o programador obriga que todos os objetos criados desta classe tera de passar atributos.
e se o mesmo nao quizer passar atributos diretamente ???

public class teste(){

	private String argumentos;

	public teste(String argumentos){
		this.argumentos = argumentos;

	}
	public void setArg(String argumentos){

		this.argumentos = argumentos;
	}
}

Class teste:

public class testeTest(){

	public static  void main (String args[]){
		
		//nao pode fazer assim
		teste t = new teste();

		// somente assim;
		teste t = new teste("Qualquer coisa");

	}
}

:lol:

Lavieri

Brn_SI:
sim,

Mas obrigatóriamente o programador obriga que todos os objetos criados desta classe tera de passar atributos.
e se o mesmo nao quizer passar atributos diretamente ???

mas tem caso que não passar parametro implica diretamente em deixar sem integridade a classe…

imagine a mesma classe que coloquei no exemplo, imagine que vc não queira nunca que existe Cnpj com valor null, para tal, vc obriga que o cara passe o número do Cnpj na hora de construir a classe…

exite varios exemplos onde isso é necessario, onde não se possa criar um construtor nulo, nem sempre um Set é aplicavél, por exemplo em Values Object isso não é permitido…

tente criar um new BigInteger() … que vc verá que não é possivel é preciso dizer qual o número deste biginteger para poder crialo! …e assim é a vida, tudo depe do que vc esta modelando…

Se pro teu sistema não existe Pessoa sem nome, vc pode obrigar que quando se crie uma pessoa, se informe o nome dela, justamente para manter a integridade

Criado 13 de janeiro de 2009
Ultima resposta 14 de jan. de 2009
Respostas 9
Participantes 7