Aloha pessoas!!!
Tenho uma duvida simples. Como é que eu sei quando devo colocar um ou mais construtores em minha classe?
Aloha pessoas!!!
Tenho uma duvida simples. Como é que eu sei quando devo colocar um ou mais construtores em minha classe?
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).
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.
Brn… porque devo criar um vazio ? para manter valores default ? isso não seria uma opção minha ?
Errado. Construtores sem parâmetros não são necessários, muito menos obrigatórios.
Só se você quiser…
[quote=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.[/quote]
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.
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
[code] /**
* Constroi um CNPJ com valor nulo
* @see #isNull()
/
public Cnpj() {
super(null);
}
/*
* Constroi um objeto {@link Cnpj} a partir de um {@link BigInteger}
*
*
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();
}
[/code]
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 ???
[code]public class teste(){
private String argumentos;
public teste(String argumentos){
this.argumentos = argumentos;
}
public void setArg(String argumentos){
this.argumentos = argumentos;
}
}[/code]
Class teste:
[code]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");
}
}[/code]
:lol:
[quote=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 ???
…
[/quote]
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