[quote=Rafael T.]Olá Pessoal.
Estou estudando o livro Java como Programa da Deitel (8º ed.). Faço os exercícios propostos e depois procuro na internet resoluções para comparar com as minhas. Sempre que é solicitado a criação de um construtor, eu crio um construtor padrão para inicializar os campos com valores default ( como 0 para um int ou “” para uma String), só que olhando as resoluções de outros, vejo que já fazem os construtores inicializando as variáveis recebendo os parâmetros que serão usados no main. a questão é…
Isso não é um construtor parametrizado e não um construtor padrão? qual devo usar quando é solicitado apenas com a palavra “construtor”?
[/quote]
Primeiro, nomenclatura. O construtor padrão (em inglês “default constructor”) é aquele que não escrevemos e o java coloca para nós.
O contrutor assim
public class NomeDaClasse{
public NomeDaClasse(){};
}
chama-se construtor sem argumentos.
É boa prática nunca usar o construtor padrão ( default), ou seja, é de bom tom sempre declarar o construtor.
mas o construtor não serve para inicializar os atributos com os seus valores iniciais, isso é feito directamente no atributo ,assim:
public class NomeDaClasse{
String nome = "O meu nome";
int quantos = 3;
public NomeDaClasse(){};
}
O construtor só é usado quando precisamos de um valor para o atributo, mas quem vai escolher o valor é quem construir o objeto
public class NomeDaClasse{
String nome = "O meu nome";
int quantos;
public NomeDaClasse(int quantos ){
this.quantos = quantos;
};
}
Repare que não inicializo o atributo com nenhum valor, porque isso seria redundate. O valor seria logo substituido pelo argumento passado no construtor.
Quando se diz “crie um construtor para a classe” sem nenhum adjetivo , significa “cria 1 construtor que coloque o objeto num estado consistente”.
Se precisar de argumentos para isso, use-os.
Quando alguem diz “crie um construtor padrão para a classe” vc deve ele mandar estudar java, porque esse construtor não é o programador que cria.
Quando alguem diz “crie um construtor sem argumentos para a classe” vc tem a instrução clara de que não pode pedir argumentos, então tem que deixar o objeto consistente mas sem os pedir.