Boa noite, Iacy! Tudo bem? =)
O construtor é um "método especial" que contém o mesmo nome da classe, mas não possui retorno, enquanto que uma instancia de uma classe, é um objeto que foi definido pela classe...
Vou usar como exemplo a classe Conta
que você mesmo mencionou, ok? =)
Vamos supor que uma conta possua um int
representando o número dela, uma String
representando a agência e um double
para o saldo...
public class Conta {
private int numero;
private String conta;
private double saldo;
// Getters e Setters...
}
E agora vamos criar uma conta:
public class TestaConta {
public static void main(String[] args) {
Conta minhaConta = new Conta();
}
}
O que fizemos aqui? Bom, criamos uma conta... Mas como? Instanciamos uma conta, chamada minhaConta, usando o new
em seu construtor...
Veja bem, minhaConta é o objeto, a instancia da classe Conta
. O construtor é public Conta()
.
Lembra que eu disse que o construtor nada mais é do que um "método especial" que tem o mesmo nome da classe, mas não tem retorno? Aí pode você estar se perguntando onde raios definimos esse construtor, né? Por padrão, se não escrevemos nada, existe um construtor padrão, vazio sem argumentos... Falei muita coisa, vou lhe mostrar. Escrever a classe conta da forma que fizemos é exatamente a mesma coisa do que escrever isso:
public class Conta {
private int numero;
private String agencia;
private double saldo;
public Conta() {
}
// Getters e Setters...
}
Olha aí o tal do construtor!
Mas, por que existe o construtor? Vamos voltar para nossa TestaConta
e imprimir o saldo:
public class TestaConta {
public static void main(String[] args) {
Conta minhaConta = new Conta();
System.out.println(minhaConta.getSaldo());
}
}
O que será impresso? Bom, R$0.00...
No final do ano passado eu fui abrir uma conta em um banco e, se não me engano, eles pedem que a conta seja aberta com um depósito de R$50.00, no mínimo.
Vamos trazer essa regra para nosso sistema... Se quiséssemos que toda conta fosse criada com um valor mínimo, poderíamos definir um construtor para isso:
public class Conta {
// Atributos e métodos...
public Conta(double quantidade) {
this.saldo = quantidade;
}
}
Agora, estamos forçando, obrigando quem for instanciar a classe Conta
, a passar um valor inicial para ele. Então teríamos que fazer o seguinte:
public class TestaConta {
public static void main(String[] args) {
Conta minhaConta = new Conta(50);
}
}
Ou seja, a conta está sendo criada já com R$50.00. =)
Mas nada impede de passarmos 0 como parâmetro... Como validar isso? Aí podemos mexer ainda mais no construtor:
public class Conta {
// Atributos e métodos...
public Conta(double quantidade) {
if (quantidade >= 50) {
this.saldo = quantidade;
} else {
System.out.println("Deve ter no mínimo R$50.00!");
}
}
}
Resumindo... Criamos um construtor que recebe um double
como argumento... E criamos um objeto, uma instancia de Conta
, que chamamos de minhaConta
... Entendeu? =)
Espero ter ajudado, mas qualquer dúvida, não deixe de postar por aqui! =)
Abraços e bons estudos,
Fábio