1
resposta

Desafio Construtores Resolvido e comentado

Classe Main.Java:

package br.com.alura.listasdesafio2;

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        //Cria uma lista de objetos do tipo Produto
        ArrayList<Produto> produtos = new ArrayList<>();

        //Instancia e inicializa objetos do tipo Produto
        Produto produto1 = new Produto("Arroz", 20.60, 500);
        Produto produto2 = new Produto("Feijão", 16.60, 325);
        Produto produto3 = new Produto("Café", 20.60, 123);

        //Adiciona os objetos acima criados, na lista de produtos
        produtos.add(produto1);
        produtos.add(produto2);
        produtos.add(produto3);

        //Printa o tamanho da lista utilizando formatted e passando como parâmetro o método size() que retorna int
        System.out.println("Tamanho da lista de produtos: %d".formatted(produtos.size()));

        //Utiliza for each pra percorrer toda a lista, atribuindo os objetos dela a um objeto do tipo Produto, chamado produto
        for(Produto produto : produtos){
            System.out.println(produto);
        }

        //Instancia e inicializa objetos do tipo ProdutoPerecivel utilizando o construtor da superclasse junto a mais um atributo anoValidade
        ProdutoPerecivel produtoPerecivel1 = new ProdutoPerecivel("Manteiga", 15.39, 30, 2026);
        System.out.println(produtoPerecivel1);
    }
}

Classe-mãe Produto:

package br.com.alura.listasdesafio2;

public class Produto {
    //Atributos
    private String nome;
    private double preco;
    private int quantidade;

    //Construtores cheio e vazio
    public Produto(String nome, double preco, int quantidade) {
        this.nome = nome;
        this.preco = preco;
        this.quantidade = quantidade;
    }
    public Produto() {}

    //Getters e Setters
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public double getPreco() {
        return preco;
    }
    public void setPreco(double preco) {
        this.preco = preco;
    }
    public int getQuantidade() {
        return quantidade;
    }
    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    //Sobrescrita do método toString() herdado de Object
    @Override
    public String toString() {
        return "Nome: %s | Preço: %.2f | Quantidade: %d".formatted(this.nome, this.preco, this.quantidade);
    }
}

Classe-filha ProdutoPerecivel:

package br.com.alura.listasdesafio2;

public class ProdutoPerecivel extends Produto{
    //Atributos
    private int anoValidade;

    //Construtor cheio de produto perecivel. Como esta Classe é filha de Produto, então é necessário usar o construtor da Classe-mãe
    public ProdutoPerecivel(String nome, double preco, int quantidade, int anoValidade) {
        //Utiliza o construtor da Classe-mãe, passando os parâmetros recebidos 
        super(nome, preco, quantidade);
        //Atribui o valor recebido no construtor ao atributo. Como esse atributo é uma especificidade desta Classe, a atribuição não passa por super
        this.anoValidade = anoValidade;
    }

    //Getters e Setters
    public int getAnoValidade() {
        return anoValidade;
    }
    public void setAnoValidade(int anoValidade) {
        this.anoValidade = anoValidade;
    }
}
1 resposta

Oii, tudo bem com você?

Meus parabéns pela resolução do desafio! Ficou excelente a forma como você organizou o código e, principalmente, como comentou cada etapa. Explicar o que o código faz é uma das melhores formas de consolidar o conhecimento.

Você aplicou muito bem o conceito de herança ao usar o extends e o super() no construtor da classe ProdutoPerecivel. Isso mostra que você entendeu como reaproveitar a lógica da classe-mãe enquanto adiciona especificidades na classe-filha.

Continue com esse foco e organização, você está indo muito bem!

Bons estudos!

Sucesso

Imagem da comunidade