Como já dito, o método main
está dentro da classe Produto
. Mas indo um pouco além…
Pra que criar a classe Produto
dentro da classe JavaProject
? Claro que existem usos legítimos para usar uma inner class (veja aqui, aqui, aqui e aqui), mas é algo que vc precisa analisar antes de sair fazendo.
Enfim, uma sugestão é colocar a classe Produto
em seu próprio arquivo Produto.java
. Ou, se for no mesmo arquivo, deixe-a fora da classe JavaProject
(lembrando que um arquivo .java
pode ter no máximo uma classe pública, então se precisar que Produto
também seja pública, ela precisa estar em outro arquivo). Só crie inner classes onde fizer sentido, senão vc complica à toa a sua hierarquia de classes.
Outro ponto é esse trecho:
Além de não ser idiomático, não está implementando uma das principais funcionalidades do construtor, que é o de… construir a instância já contendo todos os dados necessários. Ou seja, poderia alterar o código para:
public class Produto {
private String nome;
private double preco;
private int quantidade;
// construtor já recebe todos os dados que precisa
public Produto(String nome, double preco, int quantidade) {
this.nome = nome;
this.preco = preco;
this.quantidade = quantidade;
}
public int getQuantidade() {
return this.quantidade;
}
// etc... (demais métodos)
}
E para usá-la:
Produto feijao = new Produto("Feijão carioca", 8.2, 30);
System.out.println(feijao.getQuantidade());
feijao.remover(10);
System.out.println(feijao.getQuantidade());
Ou seja, já crio o produto com todos os dados necessários.
Ao fazer new Produto()
, vc cria um produto sem nome, e com preço e quantidades iguais a zero (que é o valor default quando um campo numérico não é inicializado). Mas faz sentido ter um produto sem esses dados? Eu entendo que não, daí o construtor, que força que vc já crie o produto informando todos os dados.
Claro que depende de cada caso, dos requisitos, etc. Pode ser que exista alguma situação que vc não tem a quantidade ainda, por exemplo, e ela só vai ser definida depois, etc. Mas de forma geral, vc deve pensar em quais construtores fazem sentido, em vez de criar um vazio e depois setar cada campo manualmente.